我正在尝试制作一个基本的骰子。当我在Codeskulptor中运行此程序时,它会在randint函数上引发错误。我可以使用raw_input
插入变量来设置范围吗?我应该使用不同的功能吗?
"""Program to roll random numbers within the ranges set."""
import random
sides_of_die=raw_input("Enter how many sides your die has: ")
number_of_dice=raw_input("Enter number of dice you have: ")
total=sides_of_die*number_of_dice
rollinput=raw_input("Would you like to roll now?")
rollinputcap=rollinput.upper()
if rollinputcap =="Y":
print random.randint(number_of_dice,total)
else:
print "What do you want then?"
答案 0 :(得分:2)
raw_input()
返回一个字符串,而不是整数。要将其转换为整数类型,请使用int()
:
sides_of_die = int(raw_input("Enter how many sides your die has: "))
number_of_dice = int(raw_input("Enter number of dice you have: "))
您的代码中发生了什么,您可以输入"6"
和"2"
,因此当您执行total = sides_of_die * number_of_dice
时,您将获得TypeError
答案 1 :(得分:2)
这只是因为raw_input
返回一个字符串而不是一个数字,而randint
接受两个数字作为参数
所以你应该做
total = int(raw_input(..))
重点是,这并不总是安全的。很可能会抛出异常,因此您可能希望使用try
块;但暂时,我认为这没关系(我假设你只是在学习Python)。
另一件事,这是非常重要的:
看看异常!如果你读过它,你就会知道问题到底是什么。
答案 2 :(得分:1)
除了其他人指出的raw_input()
问题之外,@ Mark Ransom的评论很重要:骰子值的总和最终遵循正态分布。请参阅:http://en.wikipedia.org/wiki/Dice#Probability
您:
if rollinputcap =="Y":
print random.randint(number_of_dice,total)
应改为
if rollinputcap =="Y":
sum_dice=[]
for i in range(number_of_dice):
sum_dice.append(random.randint(1, sides_of_dice))
print sum(sum_dice)