【发布时间】:2016-01-01 00:12:43
【问题描述】:
所以我正在尝试在 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 is False”或“P xor Q is True”),这一切都取决于真值表异或。
所有这些逻辑都在一个 for 循环中,从用户输入他们想要输入的数量开始,从 1 倒数到 0。
当我运行这个程序时,无论用户输入什么,打印语句都是“P xor Q is 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")
【问题讨论】:
-
“我不会将输入转换为 bool” - 但你可以,在
P = bool(P)行中。为什么你认为你没有? -
那还是和 P = bool(input(...)) 一样吗?我有点想,如果立即强制转换,除了空字符串之外的任何内容都会被评估为“True”。
-
任何非空字符串都将作为布尔值转换为 True。如果您将
bool调用移至另一行,这不会改变。 -
有道理。那我应该如何改变我的方法呢?
-
@PaulGowder 我已经使用
literal_eval发布了一个答案,这是安全的。使用eval确实不是一个好主意。