programing

if-statement에서 파이썬의 &&(논리적-and)에 해당하는 것은 무엇입니까?

lovejava 2023. 5. 4. 17:50

if-statement에서 파이썬의 &&(논리적-and)에 해당하는 것은 무엇입니까?

이것은 작동하지 않습니다.

if cond1 && cond2:

사용하다and&&.

은 파썬사를 합니다.and그리고.or조건부의

예.

if foo == 'abc' and bar == 'bac' or zoo == '123':
  # do something

IF 조건부에서 오류가 발생하고 있습니다.내가 뭘 잘못하고 있는 거지?

당신이 받는 이유는SyntaxError, 것입다니는이 것입니다.&&연산자입니다.저도 마찬가지예요.||그리고.!유효한 Python 연산자가 아닙니다.

다른 언어에서 알 수 있는 연산자 중 일부는 파이썬에서 다른 이름을 가지고 있습니다. 연산자 논 자&&그리고.||는 고라실불립다니로제다불▁actually▁are라고 불립니다.and그리고.or마찬가지로 논리적 부정 연산자!를 합다니고라고 합니다.not.

그래서 당신은 그냥 다음과 같이 쓸 수 있습니다.

if len(a) % 2 == 0 and len(b) % 2 == 0:

또는 심지어:

if not (len(a) % 2 or len(b) % 2):

몇 가지 추가 정보(도움이 될 수 있음):

연산자 "등량"을 다음 표에 요약했습니다.

+------------------------------+---------------------+
|  Operator (other languages)  |  Operator (Python)  |
+==============================+=====================+
|              &&              |         and         |
+------------------------------+---------------------+
|              ||              |         or          |
+------------------------------+---------------------+
|              !               |         not         |
+------------------------------+---------------------+

Python 설명서 6.11을 참조하십시오. 부울 연산입니다.

논리 연산자 외에도 Python에는 비트 연산자/이진 연산자도 있습니다.

+--------------------+--------------------+
|  Logical operator  |  Bitwise operator  |
+====================+====================+
|        and         |         &          |
+--------------------+--------------------+
|         or         |         |          |
+--------------------+--------------------+

Python에는역 연산자 Python 는에비다비트없정습니이부위있음단만트연자산역위단▁the비▁there▁python()는~하지만 그것은 와 동등하지 않습니다.not).

6.6도 참조. 1차 산술비트/이진 연산 및 6.7. 이진 산술 연산입니다.

논리 연산자(다른 많은 언어와 마찬가지로)는 단락된다는 이점이 있습니다.즉, 첫 번째 피연산자가 이미 결과를 정의한 경우 두 번째 피연산자는 전혀 평가되지 않습니다.

이것을 보여주기 위해 저는 단순히 값을 가져와서 인쇄하고 다시 반환하는 기능을 사용합니다.이것은 인쇄문 때문에 실제로 평가된 내용을 확인하는 데 유용합니다.

>>> def print_and_return(value):
...     print(value)
...     return value

>>> res = print_and_return(False) and print_and_return(True)
False

보시다시피 하나의 인쇄 문만 실행되므로 Python은 올바른 피연산자도 보지 못했습니다.

이항 연산자의 경우에는 그렇지 않습니다.이들은 항상 두 피연산자를 평가합니다.

>>> res = print_and_return(False) & print_and_return(True);
False
True

그러나 첫 번째 피연산자가 충분하지 않으면 두 번째 피연산자가 평가됩니다.

>>> res = print_and_return(True) and print_and_return(False);
True
False

이를 요약하면 다음 표가 있습니다.

+-----------------+-------------------------+
|   Expression    |  Right side evaluated?  |
+=================+=========================+
| `True` and ...  |           Yes           |
+-----------------+-------------------------+
| `False` and ... |           No            |
+-----------------+-------------------------+
|  `True` or ...  |           No            |
+-----------------+-------------------------+
| `False` or ...  |           Yes           |
+-----------------+-------------------------+

True그리고.Falsebool(left-hand-side)반품, 그들은 그럴 필요가 없습니다.True또는False그들은 그냥 돌아오기만 하면 됩니다.True또는False 때에bool그들에게 호출됩니다 (1).

Pseudo-Code에서는 그서유코드에(!)서래,and그리고.or기능은 다음과 같이 작동합니다.

def and(expr1, expr2):
    left = evaluate(expr1)
    if bool(left):
        return evaluate(expr2)
    else:
        return left

def or(expr1, expr2):
    left = evaluate(expr1)
    if bool(left):
        return left
    else:
        return evaluate(expr2)

이 코드는 Python 코드가 아닌 유사 코드입니다.에서는 에썬서다함만수없들다습니라고 하는 수 .and또는or왜냐하면 이것들은 키워드이기 때문입니다. "평가"나 "를는 안 됩니다.if bool(...).

자신의 클래스 동작 사용자 정의

암묵적인 이적인암묵▁this.bool호출을 사용하여 클래스가 동작하는 방식을 사용자 정의할 수 있습니다.and,or그리고.not.

정의될 수 위해 는 이 합니다.print발생한 상황을 추적할 수 있습니다.

class Test(object):
    def __init__(self, value):
        self.value = value

    def __bool__(self):
        print('__bool__ called on {!r}'.format(self))
        return bool(self.value)

    __nonzero__ = __bool__  # Python 2 compatibility

    def __repr__(self):
        return "{self.__class__.__name__}({self.value})".format(self=self)

다음 연산자와 함께 해당 클래스에서 어떤 일이 발생하는지 살펴보겠습니다.

>>> if Test(True) and Test(False):
...     pass
__bool__ called on Test(True)
__bool__ called on Test(False)

>>> if Test(False) or Test(False):
...     pass
__bool__ called on Test(False)
__bool__ called on Test(False)

>>> if not Test(True):
...     pass
__bool__ called on Test(True)

만약 당신이 가지고 있지 않다면.__bool__ Python은 에 Python이 합니다.__len__메서드 및 0보다 큰 값을 반환하는 경우.시퀀스 컨테이너를 생성하는 경우에 유용할 수 있습니다.

4.1도 참조. 진실 가치 테스트.

NumPy 배열 및 하위 클래스

의 범위를 또는 하위 : DataFrames인 "NumPy", "NumPy" (Pandas Series "DataFrames")가 .bool부르짖으면 두려운 자가 생길 것입니다.ValueError:

>>> import numpy as np
>>> arr = np.array([1,2,3])
>>> bool(arr)
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
>>> arr and arr
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

>>> import pandas as pd
>>> s = pd.Series([1,2,3])
>>> bool(s)
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
>>> s and s
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

이러한 경우 요소별로 수행하는 NumPy의 논리 함수를 사용할 수 있습니다.and(또는)or):

>>> np.logical_and(np.array([False,False,True,True]), np.array([True, False, True, False]))
array([False, False,  True, False])
>>> np.logical_or(np.array([False,False,True,True]), np.array([True, False, True, False]))
array([ True, False,  True,  True])

부울 배열만 다루는 경우 NumPy와 함께 이진 연산자를 사용할 수도 있습니다. 이러한 연산자는 요소별(이진형) 비교를 수행합니다.

>>> np.array([False,False,True,True]) & np.array([True, False, True, False])
array([False, False,  True, False])
>>> np.array([False,False,True,True]) | np.array([True, False, True, False])
array([ True, False,  True,  True])

(1)

그것은bool은 피산자에대호돌합니다야아와은출을 .True또는False완전히 정확하지는 않습니다.그것은 단지 부울을 반환해야 하는 첫 번째 피연산자일 뿐입니다.__bool__방법:

class Test(object):
    def __init__(self, value):
        self.value = value

    def __bool__(self):
        return self.value

    __nonzero__ = __bool__  # Python 2 compatibility

    def __repr__(self):
        return "{self.__class__.__name__}({self.value})".format(self=self)

>>> x = Test(10) and Test(10)
TypeError: __bool__ should return bool, returned int
>>> x1 = Test(True) and Test(10)
>>> x2 = Test(False) and Test(10)

ㅠㅠㅠand가 첫번 피산 다값음평으로가실되면첫제로반다번환니합를피자연으로 첫 합니다.False그리고 만약 그것이 평가된다면.True그런 다음 두 번째 피연산자를 반환합니다.

>>> x1
Test(10)
>>> x2
Test(False)

마찬가지로 지로가마에 입니다.or하지만 그 반대입니다.

>>> Test(True) or Test(10)
Test(True)
>>> Test(False) or Test(10)
Test(10)

하지만 만약 당신이 그것들을 사용한다면.if진술하다, 진술하다, 진술.if또한 암시적으로 전화할 것입니다.bool여러분과 도 있습니다.그래서 이 미세한 점들은 당신과 관련이 없을 수도 있습니다.

두 개의 댓글:

  • 사용하다and그리고.orPython에서 논리적 작업을 수행합니다.
  • 들여쓰기에는 2 대신 4개의 공백을 사용합니다.당신의 코드는 다른 모든 사람의 코드와 거의 동일하게 보일 것이기 때문에 나중에 감사할 것입니다.자세한 내용은 PEP 8을 참조하십시오.

저는 순수한 수학적 해결책을 가지고 갔습니다.

def front_back(a, b):
  return a[:(len(a)+1)//2]+b[:(len(b)+1)//2]+a[(len(a)+1)//2:]+b[(len(b)+1)//2:]

를 사용하여 C, C++와 같은 논리적 작업을 수행합니다.그대로 현재와 현재처럼.


이 재미있는 예를 보세요.

Python에서 Logic Gates를 구축하고 싶다고 가정해 보겠습니다.

def AND(a,b):
    return (a and b) #using and operator

def OR(a,b):
    return (a or b)  #using or operator

이제 그들에게 전화해 보십시오.

print AND(False, False)
print OR(True, False)

출력은 다음과 같습니다.

False
True

이것이 도움이 되길 바랍니다!

아마도 이 작업에 가장 적합한 코드는 아니지만 작동 중입니다.

def front_back(a, b):

 if len(a) % 2 == 0 and len(b) % 2 == 0:
    print a[:(len(a)/2)] + b[:(len(b)/2)] + a[(len(a)/2):] + b[(len(b)/2):]

 elif len(a) % 2 == 1 and len(b) % 2 == 0:
    print a[:(len(a)/2)+1] + b[:(len(b)/2)] + a[(len(a)/2)+1:] + b[(len(b)/2):] 

 elif len(a) % 2 == 0 and len(b) % 2 == 1:
     print a[:(len(a)/2)] + b[:(len(b)/2)+1] + a[(len(a)/2):] + b[(len(b)/2)+1:] 

 else :
     print a[:(len(a)/2)+1] + b[:(len(b)/2)+1] + a[(len(a)/2)+1:] + b[(len(b)/2)+1:]

조건부로 "and"를 사용합니다.주피터 노트북에서 가져올 때 자주 사용합니다.

def find_local_py_scripts():
    import os # does not cost if already imported
    for entry in os.scandir('.'):
        # find files ending with .py
        if entry.is_file() and entry.name.endswith(".py") :
            print("- ", entry.name)
find_local_py_scripts()

-  googlenet_custom_layers.py
-  GoogLeNet_Inception_v1.py

& 아님)&&합니다. 처럼 'and할 수 있습니다.)로 충분합니다. 또는 상위 답변에서 제안하는 것처럼 'and'를 사용할 수 있습니다.저도 판다에게서 이걸 발견했어요.

cities['Is wide and has saint name'] = (cities['Population'] > 1000000) 
& cities['City name'].apply(lambda name: name.startswith('San'))

&을 and로 바꾸면 작동하지 않습니다.

언급URL : https://stackoverflow.com/questions/2485466/what-is-pythons-equivalent-of-logical-and-in-an-if-statement