Python While循环的问题
好的,我基本上希望我的代码通过请求用户输入ROLL变量来工作,如果它是一个被指定为die(6,8,10,12,20)的数字,那么所有这些都可以工作,它选择一个随机数并输出它,很简单。但是我不能让循环退出,所以它说,虽然ROLL不等于'quit',但要做这些事情。我将在下面发布代码,但idk如何使其工作,以便当我输入'quit'时它关闭,现在当我输入时它输出'else'语句Python While循环的问题,python,python-3.x,Python,Python 3.x,好的,我基本上希望我的代码通过请求用户输入ROLL变量来工作,如果它是一个被指定为die(6,8,10,12,20)的数字,那么所有这些都可以工作,它选择一个随机数并输出它,很简单。但是我不能让循环退出,所以它说,虽然ROLL不等于'quit',但要做这些事情。我将在下面发布代码,但idk如何使其工作,以便当我输入'quit'时它关闭,现在当我输入时它输出'else'语句 #!/usr/bin/env Python3 ROLL = '' while ROLL != 'quit':
#!/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")
我试图创建一个python 2/3答案 Python2
input
解释您的输入,例如,如果可能,将其转换为整数。所以不能有整数和字符串。当输入quit
时,由于解释器不知道quit
,因此会出现namererror
使其工作的唯一方法是键入“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
/,除了
块是为了实现python 2/3的兼容性。如果存在raw\u input
,请使用它,否则将其定义为python 3的input
。从现在起,将使用原始输入,并返回字符串而不是整数
现在我们必须添加以下内容:if ROLL.isdigit()
测试字符串是否可以转换为整数。如果可能,它会转换它
现在我们测试回复是否包含在选择列表中,如果包含,我们将使用ROLL
进行随机测试(避免使用大量elif
语句)
循环也已变为非条件循环,无需在开始时初始化
ROLL
。如果输入了退出
,只需中断。有一个简单的解决方法。但首先,上面发布的代码不起作用。因为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")
“continue”将使while循环重新开始,从而检查ROLL是否为“quit”。既然是,它将终止循环并说“谢谢” 代码中的主要错误是
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")
python 2解释您的输入。不能有整数和字符串。Python3在与数字比较时会失败,Python2在解释“退出”时会失败。我用的是3,老实说,我不知道你说的是什么意思。我想当我输入'quit'时,程序会说“好的,ROLL现在退出,所以我应该终止循环”,我应该说我正在学习用真正的语言编程。我在自学Python和Ruby。我自学了如何使用Linux和用Bash编写简单的东西,但我不知道你的评论应该告诉我什么。对不起,我是个新手,好吧,这更有意义,非常感谢。我真的很喜欢自己设计程序和简单游戏的想法,但我发现自己已经过度愤怒了好几次,我马上就要检查一下;我可以在工作时使用电脑,但足球让我们很忙。我会回来让你知道它是否成功。也谢谢你给我看你做的速记数组,而不是一堆if/elif,if ROLL-in[array]更干净,我真的很感激谢谢!这很好,我会记下你所做的一些改变。