2017-08-26 42 views
0

我正在嘗試在Roll20.net上構建一個獨立的應用程序,如骰子滾輪,從簡單的開始,隨着我越來越好,我可以添加更多功能,包括GUI,但返回到這個項目在幾個月前放棄後,我甚至無法獲得最基本的形式甚至輸出。程序運行但在打印時不產生輸出

import random 
from random import randint 

d20 = randint(1,20) 

str1 = "You rolled a " 
str2 = "Congrats Critical Hit" 
str3 = "Uh Oh, Critical Fail" 

def roll(d20): 
    roll(d20) 
    print (str1 + roll(d20)) 

    if (d20 == 1): 
     print (str3) 

    elif (d20 == 20): 
     print (str3) 

    else: 
     print ("") 

我要麼得到一個完全空白的輸出,這意味着該方案在技術上運行,不然我就「在0x02A3B078功能卷」得到了或我會得到的東西是沒有定義的響應。

如何解決這個問題?

回答

0
  1. 您正在定義一個函數,但沒有調用它?在程序底部添加此行:

    roll(d20) 
    
  2. 不要在您自己的內部調用您的函數。這導致無限遞歸。


你需要的是這樣的:

... 

def roll(d20): 
    print(str1, d20) 

    if d20 == 1: 
     print(str3)  
    elif d20 == 20: 
     print(str3) 

roll(d20) 

你想使你的程序的互動?只要用戶有興趣玩,就可以初始化一個while循環並重復播放。

while True: 
    d20 = randint(1, 20) 
    roll(d20) 

    if input('Keep playing? ') not in {'y', 'Y'}: 
     break 
+0

謝謝你的迴應,我試過你的建議,但現在我得到了「RecursionError:最大遞歸深度超出」的錯誤,我不明白,因爲我正在調用函數以外的函數?所以我不應該收到這樣的錯誤。或者我剛剛完全搞錯了? 關於交互,我的計劃是在某個時候創建​​一個GUI,通過在GUI中按下按鈕調用骰子滾動功能 – Tedwyn

+0

@Tedwyn您不止一次地調用該函數。你是否照原樣複製我的代碼? –

+0

@Tedwyn我建議複製我的代碼字或粘貼更新後的解決方案,以便我們可以一起調試。 –

0

試一下

import random 
from random import randint 

str1 = "You rolled a " 
str2 = "Congrats Critical Hit" 
str3 = "Uh Oh, Critical Fail" 

def roll(d20): 

    print (str1 + str(d20)) 

    if (d20 == 1): 
     print (str3) 

    elif (d20 == 20): 
     print (str3) 


num_of_rolls = 10  
while num_of_rolls: 
    d20 = randint(1,20) 
    roll(d20) 
    num_of_rolls -= 1 

一些東西,你可能會考慮在未來。你沒有調用這個函數。它有時不打印輸出,因爲它有18:20的機會到print("")。您不應該從(1,20)範圍開始。測試(1,2)並把print聲明隨處可以。這是確保你的函數內發生了什麼的唯一方法。如果你不需要,你不需要print("")

+0

謝謝你的迴應,測試範圍是我完全忽略了測試,非常感謝 – Tedwyn

+0

@Tedwyn沒問題。祝你好運 –

相關問題