You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 15:00:45