在python中生成随机数

时间:2013-09-15 01:16:22

标签: python

我正在尝试制作一个基本的骰子。当我在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?"

3 个答案:

答案 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)