Python猜数字游戏遇AttributeError:无法向guesses追加元素
猜数字游戏AttributeError问题解决
核心错误原因
你把guesses初始赋值为整数0,但append()是Python列表的专属方法,整数对象并没有这个属性,所以执行guesses.append(cg)时必然触发AttributeError: 'int' object has no attribute 'append'。
代码中的其他问题
除了这个核心错误,代码还有几处逻辑问题需要修正:
- 没有在循环内更新
cg的值,用户只能输入一次猜测,之后会一直循环判断同一个数 - 第一次猜测后重复执行
guesses.append(cg),会导致列表中重复添加同一个猜测值 if guesses[-2]:的判断逻辑错误,当列表长度不足2时,会触发索引越界错误;而且这个判断应该用来检查是否存在上一次的猜测记录,而不是直接取索引- 猜对时的
len(guesses)计算不准确,如果第一次就猜对,guesses还是空列表,长度为0,不符合实际猜测次数
修正后的完整代码
import random correct = random.randint(1, 100) # 调试用,正式版可以注释掉 # print(correct) # 初始化空列表存储猜测记录 guesses = [] cg = int(input('Welcome to GUESSER guess here: ')) while True: # 检查输入是否越界 if cg > 100 or cg < 1: print('out of bounds') cg = int(input('Guess again: ')) continue # 猜对的情况 if cg == correct: guesses.append(cg) print(f'It took {len(guesses)} tries to guess right. Nice!') break # 处理第一次猜测的warm/cold提示 if len(guesses) == 0: if abs(cg - correct) <= 10: print('warm.') else: print('cold.') guesses.append(cg) else: # 有上一次猜测,判断warmer/colder last_guess = guesses[-1] current_diff = abs(cg - correct) last_diff = abs(last_guess - correct) if current_diff < last_diff: print('warmer') else: print('colder') guesses.append(cg) # 获取下一次猜测 cg = int(input('Guess again: '))
关键修改说明
- 将
guesses初始化为空列表[],确保可以使用append()方法 - 在循环末尾添加新的输入语句,更新
cg的值,让用户可以持续猜测 - 分情况处理第一次猜测和后续猜测的提示逻辑,避免重复添加猜测值
- 用
len(guesses) == 0判断是否是第一次猜测,避免索引越界 - 猜对时先将当前猜测加入列表,再计算猜测次数,保证计数准确
内容的提问来源于stack exchange,提问作者Mason Monroe
相关产品推荐
相关产品推荐

