Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.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
避免嵌套If语句?(Python 2.7)_Python_Nested - Fatal编程技术网

避免嵌套If语句?(Python 2.7)

避免嵌套If语句?(Python 2.7),python,nested,Python,Nested,我是从一本叫《用Python发明》的书中得到这个猜谜游戏的想法的。我不喜欢原来的脚本没有涵盖重新猜测一个数字或错误地使用一个不是1-20的数字的可能性,所以我修改了它。这个程序运行得很好,但是,我只是想了解一下if/elif/else代码块 我想重写脚本,而不必在if中嵌套和if。我甚至都不知道该怎么做。谁能帮我举一个例子,说明这个程序在没有嵌套的情况下是如何工作的,那就太好了 以下是完整的小脚本: from random import randint from sys import exit

我是从一本叫《用Python发明》的书中得到这个猜谜游戏的想法的。我不喜欢原来的脚本没有涵盖重新猜测一个数字或错误地使用一个不是1-20的数字的可能性,所以我修改了它。这个程序运行得很好,但是,我只是想了解一下if/elif/else代码块

我想重写脚本,而不必在if中嵌套和if。我甚至都不知道该怎么做。谁能帮我举一个例子,说明这个程序在没有嵌套的情况下是如何工作的,那就太好了

以下是完整的小脚本:

from random import randint
from sys import exit
name = raw_input("Hello! What's your name? ")
print "Well %s, I'm thinking of a number between 1 and 20." % name
print "Since I'm a benevolent computer program, I'll give you 6 guesses."
secret_number = randint(1, 20)

guesses_left = 6
already_guessed = []

while guesses_left > 0:
    try:
        guess = int(raw_input("Take a guess: "))

        if guess >= 1 and guess <= 20 and guess not in already_guessed:
            already_guessed.append(guess)
            guesses_left -= 1

            if guess == secret_number:
                print "You win! %d was my secret number!" % secret_number
                exit(0)
            elif guess < secret_number:
                print "Your guess is too low!"
            elif guess > secret_number:
                print "Your guess is too high!"

        elif guess in already_guessed:
            print "You already guessed that!"

        else:
            print "Not a number between 1 - 20!"
            print "Please try again!"

        print "You have %d guesses left!" % guesses_left

    except ValueError:
        print "Invalid input! Please try again!"    

只需将嵌套的if语句更改为elif,如下所示:

from random import randint
from sys import exit
name = raw_input("Hello! What's your name? ")
print "Well %s, I'm thinking of a number between 1 and 20." % name
print "Since I'm a benevolent computer program, I'll give you 6 guesses."
secret_number = randint(1, 20)

guesses_left = 6
already_guessed = []

while guesses_left > 0:
    try:
        guess = int(raw_input("Take a guess: "))

        if guess <= 1 and guess >= 20 and guess not in already_guessed:
            already_guessed.append(guess)
            guesses_left -= 1

        elif guess == secret_number:
            print "You win! %d was my secret number!" % secret_number
            exit(0)
        elif guess < secret_number:
            print "Your guess is too low!"
        elif guess > secret_number:
            print "Your guess is too high!"

        elif guess in already_guessed:
            print "You already guessed that!"

        else:
            print "Not a number between 1 - 20!"
            print "Please try again!"

        print "You have %d guesses left!" % guesses_left

    except ValueError:
        print "Invalid input! Please try again!" 

这是我看到的解决您的难题的最简单方法,只需将嵌套的if语句更改为elif,如下所示:

from random import randint
from sys import exit
name = raw_input("Hello! What's your name? ")
print "Well %s, I'm thinking of a number between 1 and 20." % name
print "Since I'm a benevolent computer program, I'll give you 6 guesses."
secret_number = randint(1, 20)

guesses_left = 6
already_guessed = []

while guesses_left > 0:
    try:
        guess = int(raw_input("Take a guess: "))

        if guess <= 1 and guess >= 20 and guess not in already_guessed:
            already_guessed.append(guess)
            guesses_left -= 1

        elif guess == secret_number:
            print "You win! %d was my secret number!" % secret_number
            exit(0)
        elif guess < secret_number:
            print "Your guess is too low!"
        elif guess > secret_number:
            print "Your guess is too high!"

        elif guess in already_guessed:
            print "You already guessed that!"

        else:
            print "Not a number between 1 - 20!"
            print "Please try again!"

        print "You have %d guesses left!" % guesses_left

    except ValueError:
        print "Invalid input! Please try again!" 
这是我所看到的解决你的困境的最简单的方法,试着这样做,使用continue退出循环的当前迭代,然后在循环的顶部重新开始

这里还有一个逻辑错误:

if guess <= 1 and guess >= 20 and guess not in already_guessed:
或更简单:

if 1 <= guess <= 20 and guess not in already_guessed:
下面是一个运行示例:

Hello! What's your name? :)
Well :), I'm thinking of a number between 1 and 20.
Since I'm a benevolent computer program, I'll give you 6 guesses.
You have 6 guesses left!
Take a guess: 2
Your guess is too low!

You have 5 guesses left!
Take a guess: 2
You already guessed that!

You have 5 guesses left!
Take a guess: 3
Your guess is too low!

You have 4 guesses left!
Take a guess: 7
Your guess is too high!

You have 3 guesses left!
Take a guess: 5
Your guess is too high!

You have 2 guesses left!
Take a guess: 4
You win! 4 was my secret number!
像这样尝试,使用continue退出循环的当前迭代,然后在循环的顶部重新开始

这里还有一个逻辑错误:

if guess <= 1 and guess >= 20 and guess not in already_guessed:
或更简单:

if 1 <= guess <= 20 and guess not in already_guessed:
下面是一个运行示例:

Hello! What's your name? :)
Well :), I'm thinking of a number between 1 and 20.
Since I'm a benevolent computer program, I'll give you 6 guesses.
You have 6 guesses left!
Take a guess: 2
Your guess is too low!

You have 5 guesses left!
Take a guess: 2
You already guessed that!

You have 5 guesses left!
Take a guess: 3
Your guess is too low!

You have 4 guesses left!
Take a guess: 7
Your guess is too high!

You have 3 guesses left!
Take a guess: 5
Your guess is too high!

You have 2 guesses left!
Take a guess: 4
You win! 4 was my secret number!

您可以使用,这也将有助于取消除尝试输入外的所有内容。您可以使用,这也将有助于取消除尝试输入外的所有内容。这从根本上改变了程序的控制流。这从根本上改变了程序的控制流。我最喜欢这个,谢谢!我特别喜欢try/except块上的指针——我一定是误解了关于try/except块的联机python文档,它看起来像是需要嵌套在其中的所有内容。没问题,很乐意帮助:是的,想想try:。。。除了:。。。当运行此块中的代码时,如果此块中的任何代码失败,请立即跳转到except:中的代码并运行它。因此,在我上面的示例中,由于except:执行continue,循环中的其余代码将永远不会执行。循环其余部分中的代码永远不会引发ValueError。有时,您确实希望将不会引发错误的代码放入try:块中,例如,如果您无法继续、中断或返回,并且不希望代码继续执行。此外,如果这解决了您的问题,请单击答案旁边的复选标记,将问题标记为已解决:谢谢!只需点击检查按钮;再次感谢!另外,逻辑错误不在我的原始脚本中,而是这里的一个编辑错误,一个我修复的错误。我最喜欢这一个,谢谢!我特别喜欢try/except块上的指针——我一定是误解了关于try/except块的联机python文档,它看起来像是需要嵌套在其中的所有内容。没问题,很乐意帮助:是的,想想try:。。。除了:。。。当运行此块中的代码时,如果此块中的任何代码失败,请立即跳转到except:中的代码并运行它。因此,在我上面的示例中,由于except:执行continue,循环中的其余代码将永远不会执行。循环其余部分中的代码永远不会引发ValueError。有时,您确实希望将不会引发错误的代码放入try:块中,例如,如果您无法继续、中断或返回,并且不希望代码继续执行。此外,如果这解决了您的问题,请单击答案旁边的复选标记,将问题标记为已解决:谢谢!只需点击检查按钮;再次感谢!另外,逻辑错误不在我的原始脚本中,而是这里的一个编辑错误,一个我修复的错误。