python - 进行 Python 测验
问题描述
我正在做一个项目,这是一个填补空白的测验,我有一个错误,我无法识别。在我未能回答间隙后,测验不显示应该出现的短语并出现错误。有人能帮我吗?我尝试了一些事情,但没有任何反应,总是当尝试击球错误时,它会显示错误,而不是显示玩家仍然有或他已经失败的尝试次数。按照代码:PS:代码在PT_BR
# coding=utf-8
# Meu quiz
print ("Escolha o nível de dificuldade para o seu jogo. Digite F para fácil, M para médio, ou D para difícil.")
# Lista do total de tentativas já feitas
count_list = []
perguntas = [
"Digite a palavra que corresponde ao espaço 0: ",
"Digite a palavra que corresponde ao espaço 1: ",
"Digite a palavra que corresponde ao espaço 2: ",
"Digite a palavra que corresponde ao espaço 3: "
]
def verificacao(frase, gabarito, tentativas):
# Verificação das palavras do jogo com contabilização
print
print (frase)
print
index = 0
while len(count_list) < tentativas and index < (tentativas + 1):
pergunta = input(perguntas[index]).lower()
if index == tentativas and pergunta == gabarito[index]:
print
print ("Parabéns! Você ganhou!")
break
if pergunta == gabarito[index]:
print
print ("Você acertou!")
print
frase = frase.replace(str(index), gabarito[index])
print (frase)
index += 1
print
else:
count_list.append(1)
print
print ("Você errou. Você tem mais") + str(
tentativas - len(count_list)) + "tentativa(s)."
print
if len(count_list) == tentativas:
print ("Você perdeu.")
break
# Variáveis do jogo
frase_facil = "Água __0__, pedra __1__, tanto __2__ até que __3__."
frase_medio = "De __0__, poeta e __1__, todo __2__ tem um __3__."
frase_dificil = "Um __0__, de exemplos __1__ mais que uma __2__ de __3__."
frases = [frase_facil, frase_medio, frase_dificil]
gabarito_facil = ['mole', 'dura', 'bate', 'fura']
gabarito_medio = ['medico', 'louco', 'mundo', 'pouco']
gabarito_dificil = ['grama', 'vale', 'tonelada', 'conselhos']
gabaritos = [gabarito_facil, gabarito_medio, gabarito_dificil]
def attempts():
# Verifica se a tentativas informada é válida, e retorna apenas se o valor for válido
while True:
try:
tentativas = int(
input("Quantas tentativas que você quer ter? "))
return tentativas
break
except ValueError:
print("Você precisa digitar um número. Tente outra vez.")
continue
while True:
# Pega o input do usuário sobre o nível de dificuldade e número de tentativas desejada, para iniciar o quiz correto com a dificuldade correta.
nivel_dificuldade = input("Nível de dificuldade: ")
tentativas = attempts()
if nivel_dificuldade.lower() == "f" or nivel_dificuldade.lower(
) == "facil" or nivel_dificuldade.lower() == "fácil":
verificacao(frase_facil, gabarito_facil, tentativas)
break
elif nivel_dificuldade.lower() == "m" or nivel_dificuldade.lower(
) == "medio" or nivel_dificuldade.lower() == "médio":
verificacao(frase_medio, gabarito_medio, tentativas)
break
elif nivel_dificuldade.lower() == "d" or nivel_dificuldade.lower(
) == "dificil" or nivel_dificuldade.lower() == "difícil":
verificacao(frase_dificil, gabarito_dificil, tentativas)
break
print ("Para escolher a dificuldade do seu quiz, você precisa apertar F, M ou D. Tente novamente.")
解决方案
问题
问题在于您发布的代码的第 46 行,在第一个循环的else
块中。while
这部分:
print ("Você errou. Você tem mais") + str(
tentativas - len(count_list)) + "tentativa(s)."
由于您关闭了 周围的括号"Você errou. Você tem mais"
,因此您只打印该字符串。然后您尝试将结果print
与下一个字符串 ( str(tentativas - len(count_list))
) 连接起来,因此您会收到错误消息:
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
因为print
不返回任何东西(即None
)。
解决方案
要解决此问题,只需将第一个右括号放在行尾,以便所有字符串连接都在括号内完成并打印整个结果。
看起来是这样的:
print ("Você errou. Você tem mais" + str(
tentativas - len(count_list)) + "tentativa(s).")
推荐阅读
- javascript - 我的程序有什么问题?它总是返回“未找到”
- laravel - Laravel 多重保护:CSRF 令牌不匹配
- excel - 从excel行值创建文本文件
- javascript - 如何在 UI 上动态显示图像?
- java - onStart、onRestart 和 onStop
- laravel - 如何添加 Datatime + 2 年
- sql - 显示每月收到的报价的月份和数量
- typescript - Angular将get属性值从父组件发送到子组件
- javascript - 使用淡入淡出动画时不显示引导模式对话框
- google-apps-script - 从服务器到 Google Web App 的请求返回 302 代码