if-if-else vs if-elif-else语句

时间:2016-08-05 20:49:18

标签: python if-statement

为什么'其他'即使选择了正确的选择,也会打印出声明?

    ch=0
    print"Do you need Ice-Cream?"
    ans=raw_input()
    if ans=='y':
        print"Pick a flavor"
        ch=raw_input() # ch is a string
        if ch=='1':
            print"Vanilla"
        if ch=='2':
            print"Chocolate"
        if ch=='3':
            print"Strawberry"
        if ch=='4':
            print"Kiwi"
        if ch=='5':
            print"orange"
        if ch=='6':
            print"mango"
        if ch=='7':
            print"pineapple"
        if ch=='8':
            print"grapes"               
        print"You are done picking up a flavor, pay now"    
    if ans=='n':
        print"Good, you can go!"
    else:
        print"wrong choice" 

输出正在打印"错误的选择"即使选择了有效的选择。

5 个答案:

答案 0 :(得分:5)

因为if语句检查“y”和第二个if语句检查“n”是两个不同的。 else只连接到带有“n”-check的第二个if语句。你想拥有像

这样的最外面的陈述
if "y":
    ....
elif "n":
    ....
else:
    ....

答案 1 :(得分:2)

您似乎将<canvas id="pieChart" width=200 height=200></canvas> 系列if与一系列if - elifs混为一谈。

请注意:

if cond0:
    ...
if cond1:
    ...
else:
    bar()

相同:

if cond0:
    ...
elif cond1:
    ...
else:
    bar()

如果cond0True,则前者会调用bar(),而后者则不会。if在前者中,只有if-else后跟完全独立的 if cond0: ... # Note spacing here, emphasizing that the above construct is separate from the one below. if cond1: ... else: bar()

这样写前者可能会有所帮助:

./stuff.sh PRM*

答案 2 :(得分:1)

ans不是'n'所以else子句会触发。您可能需要elif

if ans == 'y':
    ...
elif ans == 'n':
    ...
else:
    ...

答案 3 :(得分:1)

此代码块中的else仅指代if ans=='n'

它没有考虑你的第一个if语句。您将要将其更改为此

elif ans=='n':
    print"Good, you can go!"
else:
    print"wrong choice" 

答案 4 :(得分:0)

你有两个条件而不是一个。

  1. 第一个条件会针对ans检查'y'

    如果ans'y',则用户可以输入1-8的整数,并且相应的字符串将打印到控制台。然后处理进入第二个条件(#2)。

    如果ans不是'y',则用户不会给出任何输入,处理会移至第二个条件(#2)。

  2. 第二个条件会针对ans检查'n'

    如果ans'n'那么&#34;好,你可以去!&#34;打印到控制台,处理继续跳过else块。

    如果ans不是'n'(用户输入'y'的情况),则会执行else块打印&#34;错误选择&#34 ;到控制台。

  3. 正在发生的事情是你的逻辑设置是'n'以外的任何输入都会打印错误的选择&#34;最终。您需要来自用户初始输入的单个决策。目前你的逻辑有两个。

    使用if elif else构造。