2017-04-17 88 views
-2

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

回答

0

我懷疑您遇到的部分問題是您使用遞歸執行非遞歸任務。遞歸適合於您可以通過簡單步驟分解的任務,在每次調用中接近尾聲。這個任務不能保證終止,所以遞歸併不適合。

其實這個程序沒有退出;這是一個無限循環,閱讀輸入並以幾種方式之一進行反應。這是一個循環,您也可以使用「退出」輸入來處理循環。這樣的事情:

choice = raw_input('Roll out of %d ' % (b)) 
while choice.lower() != "quit": 
    ... 

這將處理你的循環好得多。

至於零卷,最簡潔的方法來避免零是首先不卷。我認爲你可能打算將Rolling(10)作爲D10,以均勻分佈的方式產生1-10範圍內的值。 randrange(10)爲您提供了一個均勻分佈integerse 0-9,所以你要做的就是加1的結果:

irand = randrange(b) + 1 

或更改呼叫的限制:

irand = randrange(1, b+1) 

如果您確實需要1-9範圍內的數字,請將您的代碼寫入排除0:

irand = randrange(1, b)