Python新手求助:TypeError: 'int'对象不可迭代问题排查
解决Powerball彩票匹配计数的错误问题
嘿,作为Python新手遇到这种报错很正常,我来帮你拆解一下问题根源,以及怎么修复它:
1. 报错的直接原因:计数器类型不对
你把计数器c初始化成了列表c = [],但统计匹配数量需要的是整数类型。当你执行c += 1时,Python会认为你想给列表添加元素,但+=对列表要求右边是可迭代对象(比如[1]),而整数1不是可迭代的,所以就抛出了TypeError: argument of type 'int' is not iterable这个错误。
2. 隐藏的逻辑错误:循环写法完全错了
你原本写的嵌套循环:
for i in powerball: for i in choices: c += 1
会把powerball里的每个元素和choices里的每个元素都遍历一遍,最终得到的是6*6=36的计数,这完全不是统计“匹配号码数量”的逻辑。正确的做法应该是:遍历每一个获奖号码,检查它是否在用户选的号码里,每匹配一个就把计数器加1。
修正后的完整可运行代码
import random # 注意!你的原代码漏了这个导入,运行会报NameError def playPowerball(): powerball = [] choices = [] c = 0 # 把计数器改成整数0,而不是空列表 # 生成不重复的获奖号码 while len(powerball) < 6: number = random.randint(1,64) if number not in powerball: powerball.append(number) # 获取用户的6个不重复选择 while len(choices) < 6: pick = int(raw_input('Pick a number between 1 and 64: ')) if pick not in choices: choices.append(pick) # 统计匹配的号码数量 for winning_num in powerball: if winning_num in choices: c += 1 # 优化打印语句,让结果更清晰 print(f'You have {c} correct numbers!') print(f'Winning numbers: {powerball}') print(f'Your picks: {choices}') # 别忘了调用函数才能运行哦 playPowerball()
额外小提示
- 如果你用的是Python 3,要把
raw_input()改成input(),不然会报错 - 打印语句我用了f-string(Python3.6+支持),比原来的写法更直观易读
- 变量名可以更语义化一点,比如把
i改成winning_num,代码可读性会更高
看到你说已经解决问题啦,不过还是把完整的修正思路和代码整理出来,方便你或者其他新手参考~
内容的提问来源于stack exchange,提问作者John Monahan John Mon
相关产品推荐
相关产品推荐

