2015-01-03 4 views
-5

이 임무에 당신이 어떤 부울 연산 구현해야합니다 그렇지 않으면파이썬 작업

  • "함께"표시 X ∧ y를 만족 X를 ∧ Y = 경우 X = Y = 1 : 1 및 X ∧ Y = 0 .
  • "disjunction"은 x ∨ y로 표시되고, x = y = 0이면 x ∨ y = 0이고 그렇지 않으면 x ∨ y = 1을 만족합니다.
  • "암시"(물질 의미)는 x → y로 표시되며 ¬ x ∨ y로 나타낼 수 있습니다. x가 true이면 x → y의 값은 y의 값이됩니다. 그러나 x가 거짓이면 y의 값을 무시할 수 있습니다. 그러나 연산은 일부 진리 값을 반환해야하며 두 가지 선택 만 가능하므로 반환 값은 더 적은 수 즉 true를 반환합니다.
  • "배타적"(배타적 또는) x + y로 표시되며 (x ∨ y) ∧ ¬ (x ∧ y)로 설명 할 수 있습니다. 그것은 x와 y의 가능성을 배제합니다. 산술적으로 정의하면 1 + 1 = 0 인 추가 mod 2입니다.
  • "등가"는 x ≡ y로 표시되며 ¬ (x ⊕ y)로 나타낼 수 있습니다. x와 y가 같은 값을 가질 때만 사실입니다. 여기

이러한 작업을 위해 진실 테이블을 볼 수

x | y | x∧y | x∨y | x→y | x⊕y | x≡y | 
    -------------------------------------- 
    0 | 0 | 0 | 0 | 1 | 0 | 1 | 
    1 | 0 | 0 | 1 | 0 | 1 | 0 | 
    0 | 1 | 0 | 1 | 1 | 1 | 0 | 
    1 | 1 | 1 | 1 | 1 | 0 | 1 | 
    -------------------------------------- 

두 부울 값 X를 부여하고 1 또는 0으로 y를 앞에서 설명한대로 작업 이름을 부여하고 있습니다. 당신은 여기에 지금까지 내 코드는 값을 계산하고 1 또는 0

로 반환해야합니다 :

OPERATION_NAMES = ("conjunction", "disjunction", "implication", "exclusive", "equivalence") 

def boolean(x, y, operation): 
if (x and y) == 0: 
    return 0 
elif (x or y) == 1: 
    return 1 



if __name__ == '__main__': 
    #These "asserts" using only for self-checking and not necessary for auto-testing 
    assert boolean(1, 0, u"conjunction") == 0, "and" 
    assert boolean(1, 0, u"disjunction") == 1, "or" 
    assert boolean(1, 1, u"implication") == 1, "material" 
    assert boolean(0, 1, u"exclusive") == 1, "xor" 
    assert boolean(0, 1, u"equivalence") == 0, "same?" 

첫 번째 내가 분리하고 다른 작업을 완료에 문제가있어 작동하는지! 좀 도와 주실 래요?

+1

아무것도에 대한 작업 솔루션? – jonrsharpe

+0

예 나머지 작업을 어떻게 수행해야할지 모르겠다. –

+0

* [어떻게해야할지 모르겠다] * [주제에 관한 질문]이 아닙니다. (http://stackoverflow.com/help/on- 이야기). 당신의 시도는 어디에서, 정확히 무엇이 잘못 되었습니까? – jonrsharpe

답변

3

사전을 이름에서 작업으로 매핑하십시오.

ops = { 
    'conjunction': lambda a, b: a & b, 
    'disjunction': lambda a, b: a | b, 
    # ... etc. 
} 
def boolean(a, b, operation): 
    return ops[operation](a, b) 

는, 분리 및 전용 작업은 또한 operator module에 의해 함께 처리 할 수 ​​있습니다 : 당신의 피연산자는 정수 값 1과 0만큼 비트를 작업을 사용합니다. 동등성은 평등, 그래서 operator.eq는 그것을 처리 할 수 ​​

import operator 

ops = { 
    'conjunction': operator.and_, 
    'disjunction': operator.or_, 
    'exclusive': operator.xor, 
    'equivalence': operator.eq, 
} 

implication 직접 구현하는 데 당신을 떠난다. 그러나, 텍스트는 이미 당신에게 편리한 구현 가이드 제공 :

과 같이 설명 될 수를 ¬ X ∨

그래서 람다 것 Y :

lambda a, b: (1 - a) | b 

는 NOT 시뮬레이션 1 - a를 사용하여 .

완벽한 솔루션 :

import operator 

ops = { 
    'conjunction': operator.and_, 
    'disjunction': operator.or_, 
    'implication': lambda a, b: (1 - a) | b, 
    'exclusive': operator.xor, 
    'equivalence': operator.eq, 
} 
def boolean(a, b, operation): 
    return ops[operation](a, b) 
+0

그래서 어떻게 독점하고 함축합니까? –

+0

@Martjin Pieters 왜 불협화음이 유효하지 않은 구문을 말하는가? –

+0

@ferarimaliferari : 쉼표가 없기 때문에 추가되었습니다. –

0
OPERATION_NAMES = ("conjunction", "disjunction", "implication", "exclusive", "equivalence") 
import operator 
ops = { 
    'conjunction': lambda x, y: x & y, 
    'disjunction': lambda x, y: x | y, 
    'implication': lambda x, y: (1 - x) | y, 
    'exclusive': operator.xor, 
    'equivalence': operator.eq, 
} 
def boolean(x, y, operation): 
return ops[operation](x, y) 



if __name__ == '__main__': 
#These "asserts" using only for self-checking and not necessary for auto-testing 
assert boolean(1, 0, u"conjunction") == 0, "and" 
assert boolean(1, 0, u"disjunction") == 1, "or" 
assert boolean(1, 1, u"implication") == 1, "material" 
assert boolean(0, 1, u"exclusive") == 1, "xor" 
assert boolean(0, 1, u"equivalence") == 0, "same?" 

이것은 * * "문제있어"보다 더 구체적이