Elif打印错误消息

问题描述

我以前问过类似的问题,只是解决方案似乎不起作用。我正在写一个掷骰子游戏,如果任何一个玩家的号码与计算机的号码相匹配,则该玩家获胜,并显示一条消息“您获胜”。否则,elif语句表示计算机获胜,并显示“您输了”。 我的问题是,elif语句不会显示“您输了”。它只是不断打印“您赢了”。

{2,10}

解决方法

在for循环内,if语句的参数声明不正确。这是一个示例,以帮助澄清它:

a=1
b=3
if a or b == 2:
   print(True)
else:
   print(False)

上面的示例中的if语句将始终显示 True ,因为您询问以下内容:“如果 a 的值为True /大于0 (如果 b 等于2:打印True”):

if die1 or die2 or die3 == roll1 or roll2 or roll3

您将参数声明为“如果die1,roll2或roll3的真/大于0值,或者die3等于roll1:...”,那么只需将其更改为要比较的实际值就像Abhigyan Jaiswal的回答所说的那样,它将正常工作。

,

如果您要检查die1,die2,die3中的任何一个是否与roll1,roll2,roll3中的任何一个匹配,则可以使用:

print(f'Roll # 1 was {roll1}')
print(f'Roll # 2 was {roll2}')
print(f'Roll # 3 was {roll3}')
if {die1,die3} & {roll1,roll3}:
    print('You win. Thanks for playing.')
else:
    print('You lose. Thanks for playing.')

这将检查{die1,die3}的集合和{roll1,roll3}的集合是否具有相同的元素。

此外,顺便说一下,random.randint(1,6)*2不等于掷两个骰子。一掷千金,结果翻倍。因此排除了所有奇数,并且使概率平坦。如果要模拟滚动两个骰子,则需要random.randint(1,6) + random.randint(1,6)

,

加上凯尔伍德的答案,如果您喜欢这种语法,则可以使用此方法

根据您的代码逻辑,似乎玩家在做出至少1次正确猜测时会自动获胜(我不确定这是否是您的意图)。

if die1 == roll1 or die2 == roll2 or die3 == roll3:
    print(f'Roll # 1 was {roll1}')
    print(f'Roll # 2 was {roll2}')
    print(f'Roll # 3 was {roll3}')
    print(f'You Win! - Thanks for playing!')
else:
    print(f'Roll # 1 was {roll1}')
    print(f'Roll # 2 was {roll2}')
    print(f'Roll # 3 was {roll3}')
    print(f'You Lose! - Thanks for playing!')

Python评估由关键字分隔的每个条件。非空值将始终返回True

因此,如果您正在执行此方法

elif die1 or die2 or die3 != roll1 or roll2 or roll3:

die1 die2 roll2 roll3将始终返回True,这就是导致程序始终打印“ You输”的原因

,
#You can do this as well
  
  if die1 == roll1 or die2 == roll2 or die3 == roll3:
    print(f'Roll # 1 was {roll1}')
    print(f'Roll # 2 was {roll2}')
    print(f'Roll # 3 was {roll3}')
    print(f'You Win! - Thanks for playing!')
  else:
    print(f'Roll # 1 was {roll1}')
    print(f'Roll # 2 was {roll2}')
    print(f'Roll # 3 was {roll3}')
    print(f'You Loose! - Thanks for playing!')