the-honk/school/a-level/Y12 2022-2024/Logic/Logic Gates.py
2024-10-09 18:02:48 +01:00

53 lines
No EOL
1.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from operator import not_
def getBit(prompt):
while True:
try:
bit = int(input(prompt))
if bit not in [0, 1]:
raise ValueError('Please enter either a 1 or a 0')
elif len(str(bit)) != 1:
raise ValueError('Please make sure you only enter one bit')
return bit
except ValueError as err:
if err.args[0].startswith('invalid'):
print('Please make sure you input a valid integer')
else:
print(err)
def getGate():
while True:
try:
gate = input('Please enter a gate to apply: ').upper()
if gate not in ['AND', 'OR', 'XOR', 'NAND', 'NOR', 'XNOR']:
raise ValueError
break
except ValueError:
print('Please enter a valid gate. Possible choices: AND, OR, XOR, NAND, NOR, XNOR')
if gate == 'AND':
return ('^', lambda x, y: x & y)
elif gate == 'OR':
return ('', lambda x, y: x | y)
elif gate == 'XOR':
return ('', lambda x, y: (x & not_(y)) | (not_(x) & y))
elif gate == 'NAND':
return ('', lambda x, y: not_(x & y))
elif gate == 'NOR':
return ('', lambda x, y: not_(x | y))
elif gate == 'XNOR':
return ('', lambda x, y: (x & y) | (not_(x) & not_(y)))
A = getBit('Please enter bit A: ')
B = getBit('Please enter bit B: ')
symbol, applyGate = getGate()
Q = applyGate(A, B)
print(f'''Q = A {symbol} B
= {A} {symbol} {B}
= {Q}''')