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!')
我之前也问过类似的问题,不过好像解决不了。我正在编写一个掷骰子游戏,如果任何一个玩家的数字与计算机的数字相匹配,则玩家获胜并打印一条消息“你赢了”。否则,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!')