运行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
相关产品推荐
相关产品推荐

