我创建了一个程序,用户可以选择某个侧面骰子然后滚动并输出生成的数字,然后询问用户是否想要再次滚动并使用while循环。我已经写了程序,由于某种原因,它继续重复输入骰子边数提示,我不知道为什么,这里是代码
import random
roll_agn='yes'
while roll_agn=='yes':
dice=input ('Please choose a 4, 6 or 12 sided dice: ')
if dice ==4:
print(random.randint(1,4))
elif dice ==6:
print(random.randint(1,6))
elif dice ==12:
print(random.randint(1,12))
else:
roll_agn=input('that is not 4, 6 or 12, would you like to choose again, please answer yes or no')
if roll_agn !='yes':
print ('ok thanks for playing')
我怀疑它与while循环或缩进有关,但我一直在摆弄它像3分钟,我不能让它正常工作,所以如果有人可以帮助我在这里,将不胜感激, 谢谢 !
答案 0 :(得分:2)
else: roll_agn=input
上的缩进是这样的,它只会在您退出while
循环后运行 - 但while
循环永远不会结束,直到您运行else
子句,因此无限循环。
这是一个清理过的,结构更好的版本:
# assumes Python 3.x
from random import randint
def get_int(prompt):
while True:
try:
return int(input(prompt)) # if Python 2.x use raw_input instead of input
except ValueError:
# not an int
pass
def get_yn(prompt):
while True:
value = input(prompt).strip().lower() # if Python 2.x use raw_input instead of input
if value in {'y', 'yes'}:
return True
elif value in {'n', 'no'}:
return False
def roll(sides):
return randint(1, sides)
def main():
while True:
sides = get_int("Number of sides on die (4, 6, or 12)? ")
if sides in {4, 6, 12}:
print("You rolled a {}".format(roll(sides)))
else:
print("U no reed gud?")
if not get_yn("Play again (y/n)? "):
print("Thanks for playing!")
break
if __name__=="__main__":
main()
答案 1 :(得分:1)
看起来你有if语句的缩进问题。尝试使用if来排列elif。
if dice ==4:
print(random.randint(1,4))
elif dice ==6:
print(random.randint(1,6))
elif dice ==12:
print(random.randint(1,12))