νƒœκ·Έ 보관물: logical-operators

logical-operators

if λ¬Έμ—μ„œ 파이썬의 && (논리적 및) +++your code here+++

λ‚΄ μ½”λ“œλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

def front_back(a, b):
  # +++your code here+++
  if len(a) % 2 == 0 && len(b) % 2 == 0:
    return a[:(len(a)/2)] + b[:(len(b)/2)] + a[(len(a)/2):] + b[(len(b)/2):]
  else:
    #todo! Not yet done. :P
  return

IF 쑰건뢀 μ—μ„œ 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€ .
λ‚΄κ°€ 무엇을 잘λͺ»ν•˜κ³  μžˆμ§€?



λ‹΅λ³€

andλŒ€μ‹ μ— 원할 κ²ƒμž…λ‹ˆλ‹€ &&.


λ‹΅λ³€

νŒŒμ΄μ¬μ€ μ‚¬μš© and및 or쑰건문.

즉

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

λ‹΅λ³€

IF μ‘°κ±΄λΆ€μ—μ„œ 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. λ‚΄κ°€ 무엇을 잘λͺ»ν•˜κ³  μžˆμ§€?

당신이 얻을이 μ΄μœ λŠ” SyntaxErrorμ „ν˜€ μ—†λ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€ &&νŒŒμ΄μ¬μ—μ„œ μ—°μ‚°μž. λ§ˆμ°¬κ°€μ§€λ‘œ|| ν•˜κ³  !μžˆλŠ” μœ νš¨ν•˜μ§€ 파이썬 μ—°μ‚°μž.

λ‹€λ₯Έ μ–Έμ–΄μ—μ„œ μ•Œ μˆ˜μžˆλŠ” 일뢀 μ—°μ‚°μžλŠ” Pythonμ—μ„œ λ‹€λ₯Έ 이름을 κ°–μŠ΅λ‹ˆλ‹€. 논리 μ—°μ‚°μž &&이며 ||μ‹€μ œλ‘œλŠ”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 . λΆ€μšΈ μ—°μ‚° .

논리 μ—°μ‚°μž 외에도 νŒŒμ΄μ¬μ—λŠ” λΉ„νŠΈ / 이진 μ—°μ‚°μžκ°€ μžˆμŠ΅λ‹ˆλ‹€.

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

νŒŒμ΄μ¬μ—λŠ” λΉ„νŠΈ λ‹¨μœ„μ˜ 뢀정이 μ—†μŠ΅λ‹ˆλ‹€ (λΉ„νŠΈ λ‹¨μœ„μ˜ μ—­ μ—°μ‚°μžμž…λ‹ˆλ‹€ ~. κ·ΈλŸ¬λ‚˜ μ΄λŠ” 동등 ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€not ).

6.6 도 μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€ . 단항 μ‚°μˆ  및 λΉ„νŠΈ / 이진 μ—°μ‚° 및 6.7. 이진 μ‚°μˆ  μ—°μ‚° .

논리 μ—°μ‚°μž (λ‹€λ₯Έ λ§Žμ€ μ–Έμ–΄μ—μ„œμ™€ 같이)λŠ” λ‹¨λ½λ˜μ–΄ μžˆλ‹€λŠ” μž₯점이 μžˆμŠ΅λ‹ˆλ‹€. 즉, 첫 번째 ν”Όμ—°μ‚°μžκ°€ 이미 κ²°κ³Όλ₯Ό μ •μ˜ν•˜λ©΄ 두 번째 μ—°μ‚°μžλŠ” μ „ν˜€ ν‰κ°€λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

이것을 보여주기 μœ„ν•΄ λ‹¨μˆœνžˆ 값을 κ°€μ Έ μ™€μ„œ μΈμ‡„ν•˜κ³  λ‹€μ‹œ λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. 이것은 인쇄 문으둜 인해 μ‹€μ œλ‘œ ν‰κ°€λ˜λŠ” 것을 λ³΄λŠ” 데 νŽΈλ¦¬ν•©λ‹ˆλ‹€.

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

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

λ³΄μ‹œλ‹€μ‹œν”Ό ν•˜λ‚˜μ˜ print 문만 μ‹€ν–‰λ˜λ―€λ‘œ 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)

이것은 파이썬 μ½”λ“œκ°€ μ•„λ‹Œ μ˜μ‚¬ μ½”λ“œμž…λ‹ˆλ‹€. νŒŒμ΄μ¬μ—μ„œλŠ” 호좜 된 andλ˜λŠ” orν‚€μ›Œλ“œμ΄κΈ° λ•Œλ¬Έμ— ν•¨μˆ˜λ₯Ό μž‘μ„±ν•  수 μ—†μŠ΅λ‹ˆλ‹€ . λ˜ν•œ β€œν‰κ°€β€λ˜λŠ”μ„ μ‚¬μš©ν•΄μ„œλŠ” μ•ˆλ©λ‹ˆλ‹€ if bool(...).

μžμ‹ μ˜ 클래슀의 λ™μž‘ μ‚¬μš©μž μ •μ˜

이 μ•”μ‹œ 적 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은 객체에 __len__λ©”μ†Œλ“œ κ°€ μžˆλŠ”μ§€ μ—¬λΆ€ 와 0보닀 큰 값을 λ°˜ν™˜ν•˜λŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€. μ‹œν€€μŠ€ μ»¨ν…Œμ΄λ„ˆλ₯Ό λ§Œλ“œλŠ” κ²½μš°μ— 유용 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

4.1 도 μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€ . 진싀 κ°€μΉ˜ ν…ŒμŠ€νŠΈ .

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.
  • 2 λŒ€μ‹ μ— λ“€μ—¬ 쓰기에 4 개의 곡백을 μ‚¬μš©ν•˜μ‹­μ‹œμ˜€. μ½”λ“œλŠ” λ‹€λ₯Έ μ‚¬λžŒμ˜ μ½”λ“œμ™€ 거의 λ™μΌν•˜κ²Œ 보이기 λ•Œλ¬Έμ— λ‚˜μ€‘μ— 감사 ν•  κ²ƒμž…λ‹ˆλ‹€. μžμ„Έν•œ λ‚΄μš©μ€ PEP 8 을 μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.

λ‹΅λ³€

C, C ++μ—μ„œμ™€ 같이 논리 연산을 μ‚¬μš© andν•˜κ³ or μˆ˜ν–‰ν•©λ‹ˆλ‹€. 말 κ·ΈλŒ€λ‘œ andis &&and oris|| μž…λ‹ˆλ‹€.


이 μž¬λ―ΈμžˆλŠ” 예λ₯Ό μ‚΄νŽ΄λ³΄μ‹­μ‹œμ˜€.

νŒŒμ΄μ¬μ—μ„œ 둜직 게이트λ₯Ό λ§Œλ“€κ³  μ‹Άλ‹€κ³  κ°€μ • ν•΄λ³΄μ‹­μ‹œμ˜€.

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):
  return a[:(len(a)+1)//2]+b[:(len(b)+1)//2]+a[(len(a)+1)//2:]+b[(len(b)+1)//2:]

λ‹΅λ³€

μ•„λ§ˆλ„ 이것은이 μž‘μ—…μ— κ°€μž₯ μ ν•©ν•œ μ½”λ“œλŠ” μ•„λ‹ˆμ§€λ§Œ μž‘λ™ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

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:]