问题描述
好的,所以我基本上希望我的代码通过要求用户输入ROLL变量来工作,如果它是一个指定为模具的数字(6,8,10,12,20),那么所有代码??都能正常工作,它会选择一个随机数并输出它,简单。 但是我无法使循环退出,因此它说虽然ROLL不等于“退出”,但还是可以做。 我将在下面发布代码,但是idk如何使其工作,以便当我输入“退出”时它关闭,现在当我这样做时它会输出“其他”语句。
#!/usr/bin/env Python3
ROLL = ''
while ROLL != 'quit':
import random
ROLL=input("What sided Die would you like to roll(You may enter quit to close)? ")
if ROLL == 6:
print(random.randint(1, 6))
elif ROLL == 8:
print(random.randint(1, 8))
elif ROLL == 10:
print(random.randint(1,10))
elif ROLL == 12:
print(random.randint(1, 12))
elif ROLL == 20:
print(random.randint(1, 20))
else:
print("That's not an option please choose a die...")
print("Thank you")
1楼
我试图创建一个python 2/3答案。
python 2 input
解释您的输入,例如,如果可能的话,转换为整数。
因此,您不能有整数和字符串。
输入quit
,由于解释器不知道quit
,因此会出现NameError
使其起作用的唯一方法是键入"quit"
。
但这仍然只是python2。让我们现在尝试使其可移植。
将字符串与数字进行比较时,python 3失败,因为input
返回字符串。
您将很难创建适用于两个版本的代码。 我建议这样做:
import random
# detect/create a portable raw_input for python 2/3
try:
raw_input
except NameError:
raw_input = input
while True:
ROLL=raw_input("What sided Die would you like to roll(You may enter quit to close)? ")
if ROLL.isdigit():
ROLL = int(ROLL)
if ROLL in [6,8,10,12,20]:
print(random.randint(1, ROLL))
elif ROLL == "quit":
break
else:
print("That's not an option please choose a die...")
第一次try
/ except
块是为了实现python 2/3兼容性。
如果raw_input
存在,请使用它,否则将其定义为python 3的input
。从现在开始,将使用raw_input
,并返回不是整数的字符串 。
现在我们必须添加以下内容: if ROLL.isdigit()
测试字符串是否可以转换为整数。
如果有可能,它将对其进行转换。
现在我们测试答复是否包含在选择列表中,如果包含,则对随机ROLL
使用ROLL
(避免使用大量elif
语句)。
该循环也已变为无条件循环,无需在启动时初始化ROLL
。
如果输入quit
就break
。
2楼
有一个简单的解决方法。 但是首先,上面发布的代码不起作用。 由于ROLL是字符串,因此if / elif语句中的数字也必须是字符串。
解决方案(一种简单的解决方案)是为“ quit”情况添加一个额外的if语句,然后使用“ continue”尽早完成while循环,如下所示:
import random
ROLL = ''
while ROLL != 'quit':
ROLL=input("What sided Die would you like to roll(You may enter quit to close)? ")
if ROLL == 'quit':
continue
elif ROLL == '6':
print(random.randint(1, 6))
elif ROLL == '8':
print(random.randint(1, 8))
elif ROLL == '10':
print(random.randint(1,10))
elif ROLL == '12':
print(random.randint(1, 12))
elif ROLL == '20':
print(random.randint(1, 20))
else:
print("That's not an option please choose a die...")
print("Thank you")
“继续”将使while循环重新开始,从而检查ROLL是否为“退出”。 既然如此,它将终止循环并说“谢谢”。
3楼
代码中的主要错误是input
返回一个字符串,并且您将其与整数进行比较。
例如, '6'
不等于6
。
虽然,您可以通过将输入与允许值的元组进行比较来极大地简化代码。 这将更短且更可扩展。
from random import randint
while True:
roll = input("What sided Die would you like to roll(You may enter quit to close)? ")
if roll == 'quit':
break
elif roll in ('6', '8', '10', '12', '20'):
print(randint(1, int(roll)))
else:
print("That's not an option please choose a die...")
print("Thank you")