(对于论坛发帖我还是新手,如果布局不当/措辞不好,请道歉)
请你帮我解决这个问题。我的问题是,我正在尝试让用户输入一个对骰子有效的整数,例如6,12,20等等(我只为D6和D20设置了它)我的骰子滚动应用程序我的目标是像Roll20.net上使用的独立版本一样工作,
我有两个问题:
1。)当用户选择有效的模具,例如6或20,而不是滚动所述模具时,它只返回数字6或20,或者在第一次其他故障后输入的任何数字,例如12,76相反,它应该使用相应的print语句发布1或2,因为我将randint设置为(1,2)测试打印语句。
2.。)尝试回调pick_dice函数以进行另一次尝试会导致程序陷入递归循环,并且尝试使用break语句也会导致出错。如果尝试将字符串作为输入,则抛出ValueError而不仅仅是else语句。我发现这非常令人困惑,我甚至不确定我是否正在使用正确的条件(我发现python文档非常混乱,我找不到任何有意义的东西来帮助我解决我的问题。)
我的代码:
import random
from random import randint
d20 = randint(1,2) #for test purposes rather than (1,20)
d6 = randint(1,2)
str1 = "You rolled a "
str2 = "Uh Oh, Critical Fail"
str3 = "Congrats Critical Hit"
#num = d20
#To select a die - More will be added later e.g. d10, d12, d100
num = int(input("Please pick a valid die: 6 or 20: "))
def roll(d20):
print(str1, d20)
if d20 == 1:
print(str2)
elif d20 == 2:
print(str3)
#roll(d20)
def roll(d6):
print(str1, d6)
if d6 == 1:
print(str2)
elif d6 == 2:
print(str3)
#roll (d6)
def dice():
if num == d20:
roll(d20)
elif num == d6:
roll(d6)
dice()
def pick_dice():
print (num)
if num is 6 or num is 20:
dice()
#elif num != 6 or num != 20:
else:
print ("Please input a valid die")
#I would put a break statement here but it causes an error
pick_dice()
我是否应该放弃用户输入并尝试构建一个GUI,我只需要在Tkinter中使用组合框进行骰子选择,并使用按钮来调用函数?因为我的目标是在某个时刻为这个程序构建一个GUI。我真的很难理解这些基础知识。
我希望那里的人能够帮助我或指出正确的方向,谢谢。
答案 0 :(得分:0)
您的确切要求对我来说并不清楚,但请尝试:
from random import randint
def dice(num):
d = randint(1, num)
if d == 1:
print("Uh Oh, Critical Fail")
elif d == num:
print("Congrats Critical Hit")
else:
print("You rolled a", d)
def pick_dice():
while True:
num = int(input("Please pick a valid die: 6 or 20: "))
if num in (6, 20):
dice(num)
break
else:
print ("Please input a valid die")
pick_dice()
注意:
from random import randint
为您提供randint
。您也不需要运行import random
。
在原始代码中,行num = int(input("Please pick a valid die: 6 or 20: "))
在运行开始时计算一次。语句print (num)
打印num
,但不会导致代码再次请求输入。
同样,d6 = randint(1,2)
仅评估一次。每次需要掷骰子时,您可能想再次致电randint
。
正如Adam Smith指出的那样,num is 6
仅在num
和6
存储在内存中的同一位置时才返回True。您想要检查是否相等:num == 6
。另外,如果您想检查num
是6还是20,那么可以使用num in (6, 20)
。