首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python :为什么这个简单的if-elif (C case块的复制)总是产生相同的结果?

Python :为什么这个简单的if-elif (C case块的复制)总是产生相同的结果?
EN

Stack Overflow用户
提问于 2015-01-01 06:13:09
回答 5查看 84关注 0票数 1

这里的初学者。当我输入指定的字符串时,有人能解释和/或帮助我修改这个Python代码以生成正确的输出吗?例如,如果输入三月,输出"02“。目前,程序总是输出00,为一月,无论输入。以下是代码:

代码语言:javascript
复制
x = raw_input("Starting Month: ")

if x == "January" or "january":
   stMonth = '00'
elif x == "February" or "february":
    stMonth = '01'
elif x == "March" or "march":
    stMonth = '02'
elif x == "April" or "april":
    stMonth = '03'
elif x == "May" or "may":
    stMonth = '04'
elif x == "June" or "june":
    stMonth = '05'
elif x == "July" or "june":
    stMonth = '06'
elif x == "August" or "august":
    stMonth = '07'
elif x == "September" or "september":
    stMonth = '08'
elif x == "October" or "october":
    stMonth = '09'
elif x == "November" or "november":
    stMonth = '10'
elif x == "December" or "december":
    stMonth = '11'
else:
    print "error"
print stMonth

输出:

代码语言:javascript
复制
$ python month.py 
Starting Month: march
00

提前感谢-任何和所有的帮助都是非常,非常感谢!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-01-01 06:18:42

它不能像预期那样工作的原因是,

代码语言:javascript
复制
if x == "January" or "january":

相当于:

代码语言:javascript
复制
if x == "January" or True:

第一个if语句将始终是True

代码语言:javascript
复制
>>> x = 'january'
>>> if x:
...     print x
...     
january
>>> 

使用.lower()函数将输入字符串转换为小写,这样就更容易了。

代码语言:javascript
复制
x = raw_input("Starting Month: ").lower()

if x == "january":
   stMonth = '00'
elif x == "february":
    stMonth = '01'
elif x == "march":
    stMonth = '02'
elif x == "april":
    stMonth = '03'
elif x == "may":
    stMonth = '04'
elif x == "june":
    stMonth = '05'
elif x == "june":
    stMonth = '06'
elif x == "august":
    stMonth = '07'
elif x == "september":
    stMonth = '08'
elif x == "october":
    stMonth = '09'
elif x == "november":
    stMonth = '10'
elif x == "december":
    stMonth = '11'
else:
    print "error"
print stMonth
票数 2
EN

Stack Overflow用户

发布于 2015-01-01 06:19:11

因为or的优先级高于==x == 'january' or 'January'实际上与(x == 'january') or 'January'相同,并且'January'的计算结果为true,所以组合语句始终为真。

您应该将每个语句更改为x == 'january' or x == 'January'

票数 3
EN

Stack Overflow用户

发布于 2015-01-01 06:23:30

你的声明:

代码语言:javascript
复制
if x == "January" or "january":

总是返回true,因为它的计算值为:

是x ==“一月”否,则或被计算,它检查一月并返回true。因此,如果您尝试:如果“一月”:它总是返回您的真,因此您得到00作为输出。

您可以使用或使用或使用IN子句,例如:

代码语言:javascript
复制
if x == "January" or x == "january":

代码语言:javascript
复制
if x in ("January", "january"):
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27728687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档