0

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

3 回答 3

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"and "2",所以当您输入时total = sides_of_die * number_of_dice,您会得到一个TypeError

于 2013-09-15T01:17:46.467 回答
2

这只是因为raw_input返回一个字符串,而不是一个数字,同时randint接受两个数字作为参数

所以你应该做

total = int(raw_input(..))

关键是,这并不总是安全的。异常很可能被抛出,所以你可能想使用一个try块;但就目前而言,我认为没关系(我假设你只是在学习 Python)。

另一件事,这是相当重要的:

看看异常!如果你读过它,你就会确切地知道问题出在哪里。

于 2013-09-15T01:19:39.427 回答
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)
于 2013-09-15T01:52:16.023 回答