打印随机字符串时报Traceback:TypeError: object of type 'int' has no len()
报错原因说明
- 第一个报错的核心是变量名覆盖冲突
- 你预先定义的存储数字字符的列表名称是
numbers,但第三个for循环的迭代变量也命名为numbers。Python执行循环时,会把每次迭代得到的整数值(依次为0、1、2……直到nr_numbers-1)赋值给numbers变量,直接覆盖了你原本的列表变量。 random.choice()要求传入可迭代的序列对象(比如列表、字符串),此时你传入的numbers已经是int类型的整数,自然会抛出「int类型没有len()方法」的报错。
- 修改后数字按顺序输出的原因
你调整为numb.append(random.choice(str(numbers)))时,这里的numbers依然是被覆盖后的int类型迭代值:
- 第一次循环迭代值为整数0,转成字符串是
"0",random.choice()只能取到字符0 - 第二次循环迭代值为整数1,转成字符串是
"1",random.choice()只能取到字符1
以此类推,最终输出的数字就会按照0、1、2……的顺序排列,没有随机效果。
内容的提问来源于stack exchange,提问作者Yome
相关产品推荐
相关产品推荐

