else语句没有执行

时间:2016-08-10 01:29:26

标签: python if-statement boolean-logic

我的代码部分,我问用户他们是否想要一些蛋糕让我感到困惑。

import time
print("Here comes dat boi")
time.sleep(.5)
print("Waddup dat boi")
time.sleep(1)
name = input("Whats your name?\n")
print ("Hello,",name)
time.sleep(.5)
cake = input("Hello, want some cake?\n")
if cake == 'yes' or 'ya' or 'Ya':
    print("Cool!")
else:
    print('Aww..')

示例输入:

ya
yes
no
something other

预期产出:

Cool!
Cool!
Aww..
Aww..

实际输出

Cool!
Cool!
Cool!
Cool!

为什么行print('Aww..')没有执行?

3 个答案:

答案 0 :(得分:2)

if语句建立在条件之上。如果您打算使用包含多个不同“触发器”的声明,你必须说明每个人的新条件。

因此,您的陈述要求cake ==表示每个潜在的真假结果。

import time
print("Here comes dat boi")
time.sleep(.5)
print("Waddup dat boi")
time.sleep(1)
name = input("Whats your name?\n")
print ("Hello,",name)
time.sleep(.5)
cake = input("Hello, want some cake?\n")
if cake == 'yes' or cake == 'ya' or cake == 'Ya':
    print("Cool!")
else:
    print('Aww..')

为了帮助您解决问题,我认为or 'ya' or 'Ya'由于用户输入而导致真实,并且' ya' Ya'属于字符串类型。

请不要在最后一部分引用我。我的假设可能不正确。

编辑:您的评论"
Isaac它可能有用但是应该将它们连接起来。它早先工作了。它会用一个词来表达,但如果没有,它会以各种方式说酷!"表明我关于类型匹配导致真实的假设实际上是正确的。这可能就是为什么早期的测试可能使or看起来像挂钩了不同的可能性。

以下代码if cake in ('yes', 'Ya','ya'):是正确的“挂钩”方法。将不同的可能性转化为单一条件。

OP的固定答案:

import time
print("Here comes dat boi")
time.sleep(.5)
print("Waddup dat boi")
time.sleep(1)
name = input("Whats your name?\n")
print ("Hello,",name)
time.sleep(.5)
cake = input("Hello, want some cake?\n")
if cake in ('yes', 'Ya','ya', 'fine', 'sure'):
    print("Cool!")
else:
    print('Aww..')

答案 1 :(得分:1)

我之前没有写过一行python,但我的直觉说你需要替换

if cake == 'yes' or 'ya' or 'Ya':

if cake == 'yes' or cake == 'ya' or cake == 'Ya':

您可以尝试Word in array of words(再次,未经测试,只是猜测)

if cake in ['yes','ya','Ya']:

答案 2 :(得分:0)

在Python中,非空字符串始终被评估为True。你的代码

if cake == 'yes' or 'ya' or 'Ya':

,使用布尔逻辑,无论你进入那里,都将始终执行它下面的任务。所以它始终打印"酷!"。

为了防止这种情况发生,您应该修改条件if语句,以便只捕获'yes''ya''Ya'这两个词。因此,if cake == 'yes' or 'ya' or 'Ya':应替换为

if cake == 'yes' or cake == 'ya' or cake == 'Ya':

或者如果您已经熟悉Python列表

if cake in ['yes', 'ya', 'Ya']: # Evaluates to True if cake is 
                                # equivalent to one of the strings in the list

阅读此thread以获取有关Python字符串真值的更多详细信息。