背景:学习《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 <module>
    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

更多推荐

Python3.x中input的变化:input函数默认返回字符串类型