Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python密码程序_Python - Fatal编程技术网

python密码程序

python密码程序,python,Python,我正在尝试编写一个程序,在这个程序中,用户必须猜测一个字母,以解锁这个秘密单词。如果在最多8次猜测之前正确猜测了秘密字,则函数返回true,否则函数返回false。由于某些原因,我的函数不能产生正确的输出。我会输入字母“a”,它会打印到目前为止猜测的字母:[a],然后程序就会结束。我需要帮助解决这个问题 secretWord = 'hello' lettersGuessed = [] def isWordGuessed(secretWord,lettersGuessed): guess

我正在尝试编写一个程序,在这个程序中,用户必须猜测一个字母,以解锁这个秘密单词。如果在最多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)

最后一个if语句缩进太远,导致它成为while循环的一部分。由于条件的两个分支都会导致函数返回,因此它总是在循环的第一次迭代时返回。

最后一个if语句缩进太远,导致它成为while循环的一部分。由于条件的两个分支都会导致函数返回,因此它总是在循环的第一次迭代时返回。

对于False情况,只需移动返回值即可。基本上,按照现在编写代码的方式,您永远不会回到循环的开始。此外,正如abarnert所指出的,您永远不会退出循环,因为每次循环时都会重新初始化secretlets。您必须在循环外部初始化它。您的代码应该如下所示:

secretWord = 'hello'
lettersGuessed = []

def isWordGuessed(secretWord,lettersGuessed):
    guess  = 0
    secretLetters = list(secretWord)
    secretWordLen = len(secretLetters)
    while guess <= 8:
        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 if all correct letters have been guessed
            return True

    #Return false if guessed incorrectly eight times
    return False

你只需要移动虚假案例的报税表。基本上,按照现在编写代码的方式,您永远不会回到循环的开始。此外,正如abarnert所指出的,您永远不会退出循环,因为每次循环时都会重新初始化secretlets。您必须在循环外部初始化它。您的代码应该如下所示:

secretWord = 'hello'
lettersGuessed = []

def isWordGuessed(secretWord,lettersGuessed):
    guess  = 0
    secretLetters = list(secretWord)
    secretWordLen = len(secretLetters)
    while guess <= 8:
        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 if all correct letters have been guessed
            return True

    #Return false if guessed incorrectly eight times
    return False

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

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

在那之后,它仍然不起作用,因为你每次都在循环中做secretlets=listsecretWord,所以只有在一次猜测中猜出所有字母,你才能获胜,这是不可能的,除非单词是,比如说,a或AAAA。要解决此问题,请将该线移到循环外

总而言之:

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

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

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

在那之后,它仍然不起作用,因为你每次都在循环中做secretlets=listsecretWord,所以只有在一次猜测中猜出所有字母,你才能获胜,这是不可能的,除非单词是,比如说,a或AAAA。要解决此问题,请将该线移到循环外

总而言之:

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


最后,如果您在任何一种情况下返回…我非常确定这不是您的实际缩进,并且很有可能这是一个与缩进相关的问题,因此请修复它以匹配您实际运行的内容。PS,现在他们把这个游戏叫做“秘密词语”而不是“刽子手”是为了……避免吓唬孩子或鼓励他们自杀吗?@abarnert lol,实际上是“刽子手”,现在他们把它叫做“秘密词语”。@abarnert我很抱歉,最后一个问题,你能解释一下如果不起作用怎么办吗?if not后面的语句在程序中不是布尔或其他什么…它是专门用于集合的吗?最后,如果您在任何一种情况下返回…我很确定这不是您的实际缩进,很有可能这是一个缩进相关的问题,所以请修复它以匹配您实际运行的。PS,现在他们把这个游戏叫做“秘密词语”而不是“刽子手”是为了……避免吓唬孩子或鼓励他们自杀吗?@abarnert lol,实际上是“刽子手”,现在他们把它叫做“秘密词语”。@abarnert我很抱歉,最后一个问题,你能解释一下如果不起作用怎么办吗?if not之后的语句在程序中不是布尔值或其他什么…它是专门用于集合的吗?是的,但如果我不将[if]语句放入循环中,程序将等到guess==8,即使用户已经正确猜出单词yes,但如果我没有将[if]语句放入循环中,即使用户已经正确地猜出了单词,程序也会等到guess==8,但是如果我猜到了h,e,l,o,程序仍然会在应该停止并返回时向我请求另一个字母True@SteveJobs:这是另一个问题,我在评论中描述了这个问题,并在我的回答中给出了解决方案。啊,错过了那个问题。编辑我的评论以反映第二个变化。我明白了,但如果我猜是h
,e,l,o程序仍然要求我在应该停止并返回时再发送一封信True@SteveJobs:这是另一个问题,我在评论中描述了这个问题,并在我的回答中给出了解决方案。啊,错过了那个问题。编辑我的评论以反映第二个更改。无论如何,应该对secretLetters进行一些合理性检查-我可以想到一些具有8个以上唯一字母的单词,这将以失败告终…哦,我明白了,好了,现在唯一的一点是函数不返回布尔值。它只是做一个打印语句的字母猜测。。。然后停止,但到目前为止是正确的,我只需要一个布尔值return@JonClements:嘿,如果程序想欺骗你,给你一个不赢的游戏,只要它正确地报告你输了,就可以了,对吗?@SteveJobs:only return语句返回布尔值,没有返回就无法结束,所以它确实返回一个布尔值。也许您在查看缩进时遇到问题,因此输入错误?这就是为什么PEP 8和整个社区建议缩进4个空格,而不是2个。@abarnert好的,谢谢你,很抱歉我不清楚返回的意思,我想让函数实际打印真或假,我所需要做的就是添加打印语句。无论如何,可能应该对secretLetters进行一些合理性检查-我可以想到一些具有8个以上唯一字母的单词,这将以失败告终…哦,我明白了,好了,现在唯一的一件事是函数不返回布尔值。它只是做一个打印语句的字母猜测。。。然后停止,但到目前为止是正确的,我只需要一个布尔值return@JonClements:嘿,如果程序想欺骗你,给你一个不赢的游戏,只要它正确地报告你输了,就可以了,对吗?@SteveJobs:only return语句返回布尔值,没有返回就无法结束,所以它确实返回一个布尔值。也许您在查看缩进时遇到问题,因此输入错误?这就是为什么PEP 8和整个社区建议缩进4个空格,而不是2个。@abarnert好的,谢谢你,很抱歉我不清楚我所说的返回是什么意思,我想让函数实际打印True或False我需要做的就是添加打印语句。