2017-08-26 41 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没问题。祝你好运 –

相关问题