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

运行Hangman类游戏代码报ValueError: invalid literal for int()错误如何解决

问题根因

  • 第16行定义mylist时错误使用大括号{},实际生成的是单元素集合而非列表,且提前用', '.join()把所有匹配的索引拼接为类似'1, 7'的长字符串,导致后续转int时无法识别这种带逗号空格的组合字符串,直接触发了ValueError
  • 第21行生成int2时遍历对象错误,应该遍历转换后的整数列表而非原始字符串集合
  • 第22行print(ints)引用了未定义的变量ints,还会额外触发NameError

修复方案

将原16~22行代码替换为以下内容即可实现你要的功能:

# 直接提取所有匹配位置的整数索引,无需提前转字符串拼接
int1 = [i for i, c in enumerate(password) if c == guess]
print(int1)

# 基于整数列表生成所有元素加1的新列表
int2 = [x + 1 for x in int1]
print(int2)

如果需要保留原有的字符串格式索引打印逻辑,可以在拿到int1后单独做拼接输出,不要提前拼接影响后续类型转换。

修改后完整可运行代码(可选参考)

from nltk.corpus import words
import random

word_list = words.words()
password = random.choice(word_list)
finish = len(password)

print("The password has", len(password),"letters")
print(password)

while finish > 0:
    guess = input("Please enter a letter to see where it is in the word:  ")
    occur = password.count(guess)
    
    # 修复后的16~22行逻辑
    int1 = [i for i, c in enumerate(password) if c == guess]
    print(int1)
    int2 = [x+1 for x in int1]
    print(int2)

    if len(guess) > 1 or len(guess) < 1:
        print("Enter 1 standard keyboard letter to see if it is in the word")
    
    elif guess in password:
         print(f"This letter is at position {', '.join([str(i) for i, c in enumerate(password) if c == guess])} in the word")
         finish = finish - occur
         password = password.replace(guess,'.')
         print("Only", finish, "letters left to guess")
         
    else:
        print("Try again")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:36:04