2013-08-06 29 views
0

所以这里是我的代码蟒蛇帮助想不通为什么有一块代码错误(代码学院)

a="yes" 
b="no" 
c=a[0].upper() + a[1:] 
d=b[0].upper() + b[1:] 
e=a.upper() 
f=b.upper() 
def shut_down(s): 
    if s == a or c or e: 
     return "Shutting down..." 
    if s == b or d or f: 
     return "Shutdown aborted" 
    else: 
     return"yeah" 

所以当我调用它无法正确执行功能(它不”牛逼通过所有的if语句运行),我是新来的蟒蛇,不知道这是为什么,但是当我重做的工作像下面按预想工作

a="yes" 
b="no" 
c=a[0].upper() + a[1:] 
d=b[0].upper() + b[1:] 
e=a.upper() 
f=b.upper() 
def shut_down(s): 
    if s == a: 
     return "Shutting down..." 
    if s== e: 
     return "Shutting down..." 

    if s ==c: 
     return "Shutting down..." 
    if s == b: 
     return "Shutdown aborted!" 
    if s == d: 
     return "Shutdown aborted!" 
    if s == f: 
     return "Shutdown aborted!" 

else: 
    return "Sorry, I didn't understand you." 

谁能告诉我这是为什么

+0

重复...很多很多问题。 –

+0

请指出他们将非常感谢!或者将我链接到正确的页面谢谢! –

+0

问题是没有任何标准可以用来有效地搜索它们;在过去的几年中,我碰巧看到很多人都经历过。 –

回答

0

问题与表达式s == a or c or e(及其变体)不符合您的意图。

它的估计是这样的:(s == a) or bool(c) or bool(e)。由于ce始终是“真值”(非空字符串),因此or表达式始终为真。

有几个备选解决方案:

  1. 你可以在当前的表达的版本发布了平等的测试,导致s == a or s == c or s == e,但是这是一个很多重复的文字。

  2. 另一种替代方法是使用in运算符来测试值是否在容器中:s in (a, c, e)。这不太打字,但它仍然有三个测试。

  3. 更好的解决方案将允许您完全避免多个测试。相反,您可以进行完全不区分大小写的单个测试:s.lower() == a

随着第三个解决方案,就没有必要来计算变量cde,或f(你甚至可以把"yes""no"文字直接在测试中,允许ab走开太!)。它将匹配几个输入文本(例如"yEs"),但这可能是一个功能,而不是一个错误。

+0

谢谢你这样详细的方式 –

0

这是一个问题co新手程序员经验丰富;电脑不会表现如何期望它,而是如何它是告诉到。

平等比较并非分布在所有or条款中,而是仅在第一个条件上执行。您必须在所有方面提供它自己:

if s == a or s == c or s == e: 

Python中也有这样的一个替代语法(尽管操作并不相当相同)的基础上,遏制检查:

if s in (a, c, e): 

在这如果我们只有两个操作数in,并且不需要跨元组分布。

+0

哈!感谢它真的帮助我,现在我可以睡得很紧:) –

+0

非常感谢你的替代方式,我觉得我是一个很好的方式塞满了! –