好吧,所以我基本上希望我的代码通过要求用户在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")
答案 0 :(得分: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
,并返回 strings 而不是整数。< / p>
现在我们必须添加以下内容:if ROLL.isdigit()
测试字符串是否可以转换为整数。如果有可能,它将对其进行转换。
现在,我们测试回复是否包含在选择列表中,如果包含,我们将ROLL
用作随机变量(避免使用大量elif
语句)。
循环也已变为无条件循环,无需在开始时初始化ROLL
。如果输入了break
,只需quit
。
答案 1 :(得分:1)
有一个简单的解决方法。但是首先,上面发布的代码不起作用。由于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是否为“退出”。既然如此,它将终止循环并说“谢谢”。
答案 2 :(得分:0)
代码中的主要错误是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")