Python 如何在输出不正常时停止冗余输入';不行?
我有一段用python编写的代码,可以用任意数量的边掷骰子。有时输出为零,我在其周围写了一些东西,但这样做只是重新确认输入,而不是自动修复输入。我希望这样,如果输出为零,它将重新滚动,而无需再次询问Python 如何在输出不正常时停止冗余输入';不行?,python,Python,我有一段用python编写的代码,可以用任意数量的边掷骰子。有时输出为零,我在其周围写了一些东西,但这样做只是重新确认输入,而不是自动修复输入。我希望这样,如果输出为零,它将重新滚动,而无需再次询问 from random import randrange def Rolling(b): a = 1 in1 = raw_input('Roll out of %d' % (b)) if in1 == 'roll' or in1 == 'Roll' or in1 == 'r':
from random import randrange
def Rolling(b):
a = 1
in1 = raw_input('Roll out of %d' % (b))
if in1 == 'roll' or in1 == 'Roll' or in1 == 'r':
irand = randrange(b)
if irand == 0:
Rolling(b)
else:
print "Your roll is %d out of %d" % (irand, b)
Rolling(b)
elif in1 == 'Change' or in1 == 'change':
in2 = int(raw_input('How many sides on the new die?'))
b = in2
Rolling(b)
elif in1 == 'reroll' or in1 == 'Reroll':
irand = randrange(b)
if irand == 1 or irand == 0:
Rolling(b)
else:
print "Your roll is %d out of %d" % (irand, b)
Rolling(b)
else: print "Please Type <roll in order to roll the dice."
Rolling(b) # using recursion to call again incase of erroneous input
Rolling(10)
来自随机导入范围
def滚动(b):
a=1
in1=原始输入('从%d%%(b)中推出)
如果in1=='roll'或in1=='roll'或in1=='r':
irand=随机范围(b)
如果irand==0:
滚动(b)
其他:
打印“您的卷为%d,共%d”%(i和b)
滚动(b)
elif in1==“更改”或in1==“更改”:
in2=int(原始输入(“新模具上有多少面?”)
b=in2
滚动(b)
elif in1=='reroll'或in1=='reroll':
irand=随机范围(b)
如果irand==1或irand==0:
滚动(b)
其他:
打印“您的卷为%d,共%d”%(i和b)
滚动(b)
else:print“Please Type我怀疑您遇到的部分问题是使用递归执行非递归任务。递归适用于可以通过简单步骤分解的任务,在每次调用中都接近结尾。此任务不一定会终止,因此递归不适合
事实上,这个程序没有出口;它是一个无限循环,读取输入并以几种方式之一作出反应。这是一个while循环,您也可以通过“退出”输入来处理。类似于:
choice = raw_input('Roll out of %d ' % (b))
while choice.lower() != "quit":
...
这将更好地处理您的循环
至于零滚动,避免零的最干净的方法是首先不要滚动它们。我认为您可能打算滚动(10)为D10,在均匀分布中产生1-10范围内的值。randrange(10)给出均匀分布中的整数0-9,因此您只需在结果中加1:
irand = randrange(b) + 1
或更改通话限制:
irand = randrange(1, b+1)
如果确实需要1-9范围内的数字,请编写代码以排除0:
irand = randrange(1, b)