所以我试图在Python中实现逻辑运算符XOR。我首先询问用户他们想要测试多少输入(4-TT,TF,FT,FF)。我知道XOR评估T& T-> F,T& F-> T,F& T-> T,F& F-> F。
我将用户输入的第一个布尔值作为字符串存储在变量P中。然后我转换为布尔值。就这样......
P = input("Enter boolean number 1: ")
P = bool(P)
我不会立即将输入转换为bool,因为任何非空字符串都将导致True,无论字符串是" False。"
我为上面提到的四个可能的条件建立了XOR真值表作为四个单独的if语句,然后只打印(" P xor Q为False"或" P xor Q为True&# 34;)全部取决于XOR的真值表。
所有这些逻辑都在for循环中,从用户输入他们想要输入的数量开始向下计数1到0。
当我运行此程序时,无论用户输入什么内容,print语句为" P xor Q为False。"
我无法弄明白为什么!我觉得解决方案非常简单,这是困扰我的,所以任何正确方向的帮助都会受到赞赏,谢谢!
这是我的代码:
numOfInputs = int(input("Enter the number of inputs: "))
for num in range(numOfInputs, 0, -1):
print()
P = input("Enter the first boolean: ")
P = bool(P)
Q = input("Enter the second boolean: ")
Q = bool(Q)
print()
if(P == True and Q == True):
print("P xor Q is False")
if(P == True and Q == False):
print("P xor Q is True")
if(P == False and Q == True):
print("P xor Q is True")
if(P == False and Q == False):
print("P xor Q is False")
答案 0 :(得分:2)
T
和F
都是" true"因为任何非空字符串都是" true"在Python中。这可以解释为什么你的循环没有按预期工作。
第一步是修复你的演员:
p = input('Enter a boolean value, True or False: ')
if p.lower() == 'false':
p = False
q = input('Enter the second boolean, True or False: ')
if q.lower() == 'false':
q = False
现在,当两个值彼此不相等时,XOR就是这样:
if p != q:
print('p xor q is true')
else:
print('p xor q is false')
答案 1 :(得分:0)
如果对False
使用空字符串,则代码可以正常工作,即只需按 return 。
空字符串是bool
转换为False
的唯一字符串值:
>>> bool('False')
True
>>> bool('0')
True
>>> bool('')
False
如果您不使用字符串,则Python会将0
,{}
,[]
视为等同于False
,即零容器或空容器。大多数其他事情都是True
。
如果要将其中任何一个用作输入,可以使用ast.literal_eval
将字符串值转换为实际类型,然后转换为bool以获取True
或False
。< / p>
>>> import ast.literal_eval
>>> value = literal_eval('False')
>>> type(value)
bool
>>> value
False
>>> value = literal_eval('0')
>>> type(value)
int
>>> bool(value)
False
您的布尔比较可以简化,例如:
if(P == True and Q == False):
print("P xor Q is True")
可能是:
if P and not Q:
print("P xor Q is True")