背景:学习《Python基础教程第2版》,第10.3章 标准库:一些最爱 时,
运行如下例子:
用户选择投掷的骰子数以及每个骰子具有的面数,随机返回骰子的点数,代码如下:
from random import randrange
num = input('How many dice? ')
sides = input('How many sides per die? ')
sum = 0
for i in range(num):sum += randrange(sides) + 1
print( 'The result is ',sum)
运行之后报如下错误:
=================== RESTART: D:/Python/my_program/dice.py ===================
How many dice? 3
How many sides per die? 6
Traceback (most recent call last):
File "D:/Python/my_program/dice.py", line 21, in for i in range(num):sum += randrange(sides) + 1
TypeError: 'str' object cannot be interpreted as an integer
分析错误提示是说不能把str类型的对象当成int类型用
for语句中用到了num,sum,sides三个变量,分析发现sum肯定是int型,而num和sides都是input传入的,那问题肯定出在input函数上,于是通过编码验证:
>>> a = input ('How many dice?')
How many dice?3
>>> a
'3' ------ 由此可见,input输入的是字符串类型的值
查找资料发现:
python3.x版本中,舍弃了raw_input函数,只保留了input( )函数,其接收任意输入,将所有输入默认为字符串处理,并返回字符串类型
因此,上述代码要运行成功,需修改如下:
from random import randrange
num = int(input('How many dice? ')) ---- 强制转换成想要的类型
sides = int(input('How many sides per die? '))
sum = 0
for i in range(num):sum += randrange(sides) + 1
print( 'The result is ',sum)
再次运行通过:
=================== RESTART: D:/Python/my_program/dice.py ===================
How many dice? 5
How many sides per die? 6
The result is 15