问题理解if语句python中的条件

时间:2014-11-16 19:04:58

标签: python

你好我是python编程的初学者,我必须写一个摇滚纸剪刀游戏。然而,应该键入的唯一字符串是摇滚,剪刀或纸张。如果我在if语句中检查它我有以下问题上面的代码继续给出正确的输出,即使我在player1和player2中输入错误的输入。 它没有切换到else条件。

def rps():
print "********** Rock Paper Scissors **********"

print 'what does player 1 choose?' 
player1 = raw_input()
print 'what does player 2 choose?' 
player2 = raw_input()

if player1 and player2 == 'rock' or 'paper' or 'scissor':
    print 'correct'

else:
    print 'this is not a valid object selection'

奇怪的是,在某些情况下,它确实有效吗?

2 个答案:

答案 0 :(得分:2)

这是一个有效的表达,只是没有做你认为它做的事情:

if player1 and player2 == 'rock' or 'paper' or 'scissor':

正在检查几件事:

player
player2 == 'rock'
'paper'
'scissor'

如果字符串非空,则字符串可转换为bool。因此,在这种情况下,'paper''scissor'都会评估为True。因此,我们可以重写您的条件如下,为重点添加括号:

if  (player1 and player2 == 'rock') or True or True:

相当于

if True:

可能不是你要检查的内容。

答案 1 :(得分:0)

你的if语句是:

if player1 and player2 == 'rock' or 'paper' or 'scissor':

Python允许您省略括号,但这是解析它的方式:

if (player1) and (player2 == 'rock') or ('paper') or ('scissor'):

意思是,它会检查玩家1的真实性,玩家2是否是“摇滚”,或者是否“纸张”。或者'剪刀'是真的。

在Python中,非空字符串总是很简单,意思是“纸张”。或者'剪刀'永远是True

你真正想要的是像

if player1 in ('rock', 'paper', 'scissor') and player2 in ('rock', 'paper', 'scissor')