gpt4 book ai didi

python密字程序

转载 作者:太空宇宙 更新时间:2023-11-04 10:48:22 25 4
gpt4 key购买 nike

我正在尝试编写一个程序,用户必须猜测一个字母才能解锁密码。如果在最多 8 次猜测之前猜对了密码,则函数返回 true,否则函数返回 false。出于某种原因,我的功能无法产生正确的输出。我会输入字母“a”,它会打印“到目前为止猜到的字母:['a']”,然后程序就会结束。我需要帮助来解决这个问题。

secretWord = 'hello'
lettersGuessed = []


def isWordGuessed(secretWord,lettersGuessed):
guess = 0
while guess <= 8:
secretLetters = list(secretWord)
secretWordLen = len(secretLetters)
letter = input('Enter a letter: ')
lettersGuessed.append(letter)

print('Letters guessed so far: ',lettersGuessed)

if letter not in secretLetters:
guess += 1

while letter in secretLetters:
secretLetters.remove(letter)

if secretLetters == []:
return True
else:
return False



isWordGuessed(secretWord,lettersGuessed)

最佳答案

您的第一个问题是,正如 kwatford 解释的那样,您每次都在循环中返回。您可以通过将 if 语句移到 while 循环之外来解决这个问题。

您的下一个问题,正如 Vorticity 所解释的那样,它永远不会提前返回,即使用户猜出了整个单词。要解决此问题,请将 if 部分移回循环内,但将 else 部分留在循环外(意味着您不再需要 else )

在那之后,它仍然不会起作用,因为你每次都在执行 secretLetters = list(secretWord) 循环,所以你只能赢您一次猜出所有字母(这是不可能的,除非单词是 "a""aaaaa")。要解决此问题,请将该行移到循环之外。

综合起来:

def isWordGuessed(secretWord,lettersGuessed):
guess = 0
secretLetters = list(secretWord)
while guess <= 8:
secretWordLen = len(secretLetters)
letter = input('Enter a letter: ')
lettersGuessed.append(letter)

print('Letters guessed so far: ',lettersGuessed)

if letter not in secretLetters:
guess += 1

while letter in secretLetters:
secretLetters.remove(letter)

if secretLetters == []:
return True

return False

附带说明一下,您可以做很多事情来简化它。

首先,你真的只需要一组 secret 单词中的所有字母——你不需要知道顺序,或者每个字母有多少个副本,等等。所以,而不是 list,使用。这也意味着您不需要围绕 secretLetters.remove(letter) 的循环。

更简单的是,您创建了 secretWordLen 但从不使用它。

您还接受并附加到调用者传入的 lettersGuessed,但调用者只是传递给您一个空列表,并且在事后从未使用它,所以何必呢?如果您不需要为了调用者的利益而改变它,您可以将它保留为字符串,这样用户看到的是 help 而不是 ['h', 'e', 'l', 'p'],这要好得多。

您还有一些正在测试的案例,即使它们不可能是真的。

最后,空列表(或集合,或任何其他序列)为假,因此没有理由明确地与空列表进行比较。

当我这样做的时候,我将对间距进行 PEP8 化,以便更容易看到缩进。

所以:

def isWordGuessed(secretWord):
guess = 0
lettersGuessed = ''
secretLetters = set(secretWord)
while guess <= 8:
letter = input('Enter a letter: ')
lettersGuessed += letter
print('Letters guessed so far:', lettersGuessed)
if letter not in secretLetters:
guess += 1
else:
secretLetters.remove(letter)
if not secretLetters:
return True
return False

关于python密字程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15672225/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com