Python 在捕捉到输入错误后在第二次迭代中出现问题
只是学习python,试着做一个关于刽子手的游戏。 我在运行程序时遇到了一个问题,如果我在运行程序时不想把它扔掉(例如输入“enter”和输入“2”),那么它会给我一个随机的困难词 如果我试图把它扔掉,(例如输入“enter”,输入“12”,输入“3”),它会返回“None” 我一直在想办法,在不同的地方打印不同的变量,看看有什么问题,但我什么也找不到 如果能得到任何帮助,我将不胜感激。 欢迎您提供任何其他信息Python 在捕捉到输入错误后在第二次迭代中出现问题,python,python-3.x,error-handling,Python,Python 3.x,Error Handling,只是学习python,试着做一个关于刽子手的游戏。 我在运行程序时遇到了一个问题,如果我在运行程序时不想把它扔掉(例如输入“enter”和输入“2”),那么它会给我一个随机的困难词 如果我试图把它扔掉,(例如输入“enter”,输入“12”,输入“3”),它会返回“None” 我一直在想办法,在不同的地方打印不同的变量,看看有什么问题,但我什么也找不到 如果能得到任何帮助,我将不胜感激。 欢迎您提供任何其他信息 随机导入 输入数学 #随机字发生器 以open('wordbank.csv')作为
随机导入
输入数学
#随机字发生器
以open('wordbank.csv')作为f:
file=f.read().split('\n')
单词列表=列表(文件)
def最大字母(x):
最大长度=0
对于x中的单词:
如果len(str(words))>=最大长度:
最大长度=长度(str(字))
返回最大长度
def字_选择器(x):
diff=input(“您想要什么难度?键入1-3的难度,然后按‘回车’:”)
差异列表=[]
diff_var=math.ceil((最大字母(单词列表)/3))
如果差异==“1”或差异==“2”或差异==“3”:
对于x中的单词:
长度=长度(str(字))
如果差异==“1”:
如果012
。函数word\u selector()
将执行else
语句,该语句将回调函数:
def word_selector(x):
(...)
else:
word_selector(word_list) # <-- we are here
正如您现在看到的,else
条件只是说“apple”,没有返回任何内容或将其赋值。由于函数不返回任何内容,python
使其返回None
,这类似于空值/未定义值。这就是为什么你会犯错误
作为解决方案,我认为您必须将错误检查和获取代码的输入从word\u selector()
移动到start\u hangman()
循环。例如,这可以按预期工作:
import random
import math
# Random Word Generator
with open('wordbank.csv') as f:
file = f.read().split('\n')
word_list = list(file)
def max_letters(x):
max_length = 0
for words in x:
if len(str(words)) >= max_length:
max_length = len(str(words))
return max_length
def word_selector(x, diff):
diff_list = []
diff_var = math.ceil((max_letters(word_list) / 3))
for words in x:
length = len(str(words))
if diff == "1":
if 0 < length <= diff_var:
diff_list.append(str(words))
elif diff == "2":
if diff_var < length <= (diff_var * 2):
diff_list.append(str(words))
elif diff == "3":
if (diff_var * 2) < length:
diff_list.append(str(words))
return random.choice(diff_list)
def start_hangman():
start = input("Press 'Enter' to start!\n")
if start == "":
diff = input(
"What difficulty would you like? Type a difficulty of 1 - 3 and press 'Enter': ")
if diff == "1" or diff == "2" or diff == "3":
print(word_selector(word_list, diff))
else:
print("That's not an option... Difficulties are 1 - 3. Try again.")
start_hangman()
else:
print("What are you doing??? Just press enter!")
start_hangman()
start_hangman()
随机导入
输入数学
#随机字发生器
以open('wordbank.csv')作为f:
file=f.read().split('\n')
单词列表=列表(文件)
def最大字母(x):
最大长度=0
对于x中的单词:
如果len(str(words))>=最大长度:
最大长度=长度(str(字))
返回最大长度
定义字选择器(x,差异):
差异列表=[]
diff_var=math.ceil((最大字母(单词列表)/3))
对于x中的单词:
长度=长度(str(字))
如果差异==“1”:
如果012
。函数word\u selector()
将执行else
语句,该语句将回调函数:
def word_selector(x):
(...)
else:
word_selector(word_list) # <-- we are here
正如您现在看到的,else
条件只是说“apple”,没有返回任何内容或将其赋值。由于函数不返回任何内容,python
使其返回None
,这类似于空值/未定义值。这就是为什么你会犯错误
作为解决方案,我认为您必须将错误检查和获取代码的输入从word\u selector()
移动到start\u hangman()
循环。例如,这可以按预期工作:
import random
import math
# Random Word Generator
with open('wordbank.csv') as f:
file = f.read().split('\n')
word_list = list(file)
def max_letters(x):
max_length = 0
for words in x:
if len(str(words)) >= max_length:
max_length = len(str(words))
return max_length
def word_selector(x, diff):
diff_list = []
diff_var = math.ceil((max_letters(word_list) / 3))
for words in x:
length = len(str(words))
if diff == "1":
if 0 < length <= diff_var:
diff_list.append(str(words))
elif diff == "2":
if diff_var < length <= (diff_var * 2):
diff_list.append(str(words))
elif diff == "3":
if (diff_var * 2) < length:
diff_list.append(str(words))
return random.choice(diff_list)
def start_hangman():
start = input("Press 'Enter' to start!\n")
if start == "":
diff = input(
"What difficulty would you like? Type a difficulty of 1 - 3 and press 'Enter': ")
if diff == "1" or diff == "2" or diff == "3":
print(word_selector(word_list, diff))
else:
print("That's not an option... Difficulties are 1 - 3. Try again.")
start_hangman()
else:
print("What are you doing??? Just press enter!")
start_hangman()
start_hangman()
随机导入
输入数学
#随机字发生器
以open('wordbank.csv')作为f:
file=f.read().split('\n')
单词列表=列表(文件)
def最大字母(x):
最大长度=0
对于x中的单词:
如果len(str(words))>=最大长度:
最大长度=长度(str(字))
返回最大长度
定义字选择器(x,差异):
差异列表=[]
diff_var=math.ceil((最大字母(单词列表)/3))
对于x中的单词:
长度=长度(str(字))
如果差异==“1”:
如果0返回“这不是一个选项…困难是1-3。请重试。”)
没有wordbank.csv无法运行您的代码。我有它。如前所述,若我不想把它扔掉,程序就可以运行。若你们提出了一个异常,那个么你们必须提到自定义错误。并没有错误。它仍在输出结果。结果是“无”。(wordbank.csv中没有一个单词,文件中只有五个字母或更多的单词)您在代码的该部分没有返回任何内容,只是打印了一些内容。尝试返回“这不是一个选项…困难是1-3。再试一次。”)
没问题!一般来说,尽量将每个函数的角色分开:一个函数选择单词,另一个函数获取输入等等。。。它不仅使查找错误变得更容易,而且还很酷和优雅:DNo问题!一般来说,尽量将每个函数的角色分开:一个函数选择单词,另一个函数获取输入等等。。。它不仅会使发现错误变得更容易,而且还很酷和优雅:D