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

制作Hangman游戏时替换指定位置字符遇TypeError问题求助

解决Hangman游戏中的TypeError错误

你遇到的TypeError: list indices must be integers or slices, not list,问题出在这一行:

guessoutput = guessgui[a].replace(".", guess)

原因是a是一个存储所有匹配位置的列表(比如猜中字母在第0、2位时,a就是[0,2]),但guessgui已经被转成了列表,列表的索引只能是整数或切片,不能用列表当索引来访问元素。

正确的处理方式是遍历所有匹配的位置,逐个修改guessgui里的对应元素,再把列表转成字符串输出。修改后的完整代码如下:

#gameset takes an input word, formats it into lowercase and prints out a line of underscores of the length of the original string via multiplication
def gameset():
    global lives
    lives = 10
    global word
    word = input("请输入要猜的单词:").lower()
    global guessgui
    guessgui = list("."*len(word))
    print(''.join(guessgui))

def play():
    global guess
    global word
    global lives
    global guessgui  # 必须声明全局变量,否则修改的是局部变量
    while True:
        guess = input("请输入猜测的字母:")
        # 增加输入合法性判断,确保只输入单个字母
        if len(guess) != 1 or not guess.isalpha():
            print("请输入单个英文字母!")
            continue
        guess = guess.lower()
        if guess in word:
            print("Nice!")
            a = [pos for pos, char in enumerate(word) if char == guess]
            # 遍历所有匹配位置,更新显示列表
            for pos in a:
                guessgui[pos] = guess
            # 把列表转成字符串打印
            print(''.join(guessgui))
            # 判断是否猜完整个单词
            if '.' not in guessgui:
                print("恭喜你猜对了!")
                break
        else:
            lives -= 1
            print(f"wrong guess, you have {lives} lives left!")
            # 生命值耗尽时结束游戏
            if lives == 0:
                print(f"游戏结束!正确单词是:{word}")
                break

gameset()   
play()

额外优化点说明:

  • 在play函数中添加了global guessgui声明,确保修改的是全局变量
  • 增加了输入合法性判断,避免用户输入非单个字母的内容
  • 添加了游戏胜利(猜完所有字母)和失败(生命值耗尽)的结束逻辑

内容的提问来源于stack exchange,提问作者Antonionich

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 17:55:21