Elif 打印错误信息

Elif prints wrong message

我之前也问过类似的问题,不过好像解决不了。我正在编写一个掷骰子游戏,如果任何一个玩家的数字与计算机的数字相匹配,则玩家获胜并打印一条消息“你赢了”。否则,elif 语句意味着计算机获胜并打印“你输了”。 我的问题是 elif 语句不会打印“你输了”。它只是不断打印“你赢了。”

import random

die1 = 0
die2 = 0
die3 = 0
roll1 = 0
roll2 = 0
roll3 = 0

def dice_roll():
    dieroll = random.randint(1, 6)*2
    return dieroll

for die in range(12):
    die1 = int(input(f'Choose a number between 2 and 12: '))
    die2 = int(input(f'Choose a number between 2 and 12: '))
    die3 = int(input(f'Choose a number between 2 and 12: '))
    roll1 = dice_roll()
    roll2 = dice_roll()
    roll3 = dice_roll()
    if die1 or die2 or die3 == roll1 or roll2 or 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!')
    elif die1 or die2 or die3 != roll1 or roll2 or roll3:
        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!')

如果你想检查 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, die2, die3} & {roll1, roll2, roll3}:
    print('You win. Thanks for playing.')
else:
    print('You lose. Thanks for playing.')

这会检查 {die1, die2, die3} 的集合和 {roll1, roll2, roll3} 的集合是否有任何共同的元素。

此外,顺便说一下,random.randint(1, 6)*2 不等于掷两个骰子。掷一个骰子,结果翻倍;所以所有的奇数都被排除了,概率被拉平了。如果你想模拟掷两个骰子,你想要 random.randint(1,6) + random.randint(1,6).

在您的 for 循环中,if 语句的参数声明不正确。下面是一个有助于阐明它的示例:

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

上例中的 if 语句将始终打印 True 因为您在询问以下内容:“if a 持有一个值True/greater 比 0 如果 b 等于 2:打印 True" 在你的情况下:

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

您将参数声明为“如果 die1、roll2 或 roll3 有任何 True/greater 小于 0 的值,或者如果 die3 等于 roll1:...”,所以只需将其更改为实际值与 Abhigyan Jaiswal 的回答所述相比,您需要它们,它会正常工作。

添加到 khelwood 的答案中,如果您喜欢这种语法,可以使用这种方法

从你的代码逻辑来看,似乎玩家至少猜对 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 评估由关键字分隔的每个条件。 non-null 值总是 return True

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

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

die1 die2 roll2 roll3 将始终 return 正确,这就是导致您的程序始终打印“你输了”的原因

#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!')