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':

我有一段用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':
     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)