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
그리고.False
을 bool(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보다 큰 값을 반환하는 경우.시퀀스 컨테이너를 생성하는 경우에 유용할 수 있습니다.
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
그리고.or
Python에서 논리적 작업을 수행합니다. - 들여쓰기에는 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
'programing' 카테고리의 다른 글
React Native를 사용할 때 데이터를 저장하기 위한 옵션은 무엇입니까? (iOS 및 Android) (0) | 2023.05.04 |
---|---|
스택 생성 날짜 가져오기 (0) | 2023.05.04 |
고유 값을 카운트하는 단순 피벗 테이블 (0) | 2023.05.04 |
이클립스 오류 "ADB 서버가 확인하지 못했습니다. 데몬을 시작하지 못했습니다." (0) | 2023.04.29 |
Excel 공식에서 --는 무엇을 합니까? (0) | 2023.04.29 |