如何修改if语句



我试图做一个非常紧凑的rps(石头、纸、剪刀),为了让它发挥作用,我使用了一个非常不完美但功能性的逻辑,即如果变量的结果是某个值,那么它将赢得p,如果不是(包括平局),它将失去。在代码的底部有更多的解释,但我想说的是,如果通过决策表的值p和m等于1或2,那么它将执行下一行代码,但使用制动器,它工作了一半,没有错过其他类型的操作,使用==右侧表达式中的制动器,它错过了另一部分。我注意到,如果你把它像另一个表达式一样放:

if table[p]-table[m] == 1 or table[p] - table[m] == -2

但由于我想要紧凑,我想知道是否有任何方法可以用同样的表达方式表达,谢谢。附言:变量已经用全名写了出来,以使其更容易理解,但最终版本不会是这样。

table = {'r':0, 'p':1, 's':2}
p = input()
m = input()
if table[p]-table[m] == (1 or -2):
print('w')

else:
print('l')

'''
s,p= 1w
s,r=2l
p,r =1w
p,s =-1l
r,s=-2w
r,p=-1l

w=1,1,-2
l=-1,-1,2'''

由于(1 or -2)变成了1,您的

if table[p]-table[m] == (1 or -2):

与相同

if table[p]-table[m] == 1:

相反,您可以在可能值的集合中检查成员身份,例如:

if table[p]-table[m] in {1, -2}:

或者,由于您只使用它来打印wl,因此可以使用Python对负索引的支持,而完全不使用if

print('lwl'[table[p]-table[m]])

带有进一步欺骗的完整程序:

t='rp'.find
print('lwl'[t(input())-t(input())])

为什么不使用"modulo"运算符?

if (table[p] - table[m]) % 3 == 1 :
....

是的,使用打印格式选项:

print(f"{'w' if table[p]-table[m] == 1 or table[p]-table[m] == 0 else '1'}")

如@Perter Wood在评论中指出的,带有1 or 2的if语句确实是错误的,因为它会首先比较总是求值为1的1 or 2,然后将结果与table[p]-table[m]进行比较。

最新更新