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

Python新手:为什么这个简单的if-elif(C case块的复制)总是产生相同的结果?,python,if-statement,Python,If Statement,我是初学者。每当我输入指定的字符串时,是否有人能解释和/或帮助我修改此Python代码以生成正确的输出?例如,如果输入三月,则输出“02”。目前,无论输入如何,程序始终输出1月份的00。代码如下: x = raw_input("Starting Month: ") if x == "January" or "january": stMonth = '00' elif x == "February" or "february": stMonth = '01' elif x == "

我是初学者。每当我输入指定的字符串时,是否有人能解释和/或帮助我修改此Python代码以生成正确的输出?例如,如果输入三月,则输出“02”。目前,无论输入如何,程序始终输出1月份的00。代码如下:

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

输出:

$ python month.py 
Starting Month: march
00
提前感谢-任何和所有的帮助是非常非常感谢

这是因为
“一月”
的计算结果为
True
,请查看以下内容:

In [1]: x = 'march'

In [2]: if x == "January" or "january":
   ...:        stMonth = '00'
   ...:     

In [3]: stMonth
Out[3]: '00'

In [4]: bool("january")
Out[4]: True
您可能想要:

x == "January" or x == "january":
    stMonth = '00'
或者更好:

x.lower() == "january":
    stMonth = '00'
这是因为
“一月”
的计算结果为
True
,请查看以下内容:

In [1]: x = 'march'

In [2]: if x == "January" or "january":
   ...:        stMonth = '00'
   ...:     

In [3]: stMonth
Out[3]: '00'

In [4]: bool("january")
Out[4]: True
您可能想要:

x == "January" or x == "january":
    stMonth = '00'
或者更好:

x.lower() == "january":
    stMonth = '00'

它不能按预期工作的原因是

if x == "January" or "january":
相当于:

if x == "January" or True:
第一个
if
语句将始终是
True

>>> x = 'january'
>>> if x:
...     print x
...     
january
>>> 

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

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

它不能按预期工作的原因是

if x == "January" or "january":
相当于:

if x == "January" or True:
第一个
if
语句将始终是
True

>>> x = 'january'
>>> if x:
...     print x
...     
january
>>> 

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

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

由于
的优先级高于
==
x=='janur'或'janur'
实际上与
(x='janur')或'janur'
相同,并且当
'janur'
的计算结果为
true时,组合语句始终为true


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

因为
的优先级高于
=
x=='january'或'january'
实际上与
(x='january')或'january'
相同,并且当
'january'
的计算结果为
true时,组合语句始终为true


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

为了澄清您的疑问,请按如下方式修复代码:

if x == "January" or x == "january":
   stMonth = '00'
elif x == "February" or x == "february":
    stMonth = '01'

为了澄清您的疑问,请按如下方式修复代码:

if x == "January" or x == "january":
   stMonth = '00'
elif x == "February" or x == "february":
    stMonth = '01'
你的声明:

if x == "January" or "january":
始终返回true,因为其计算结果为:

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

您可以在以下子句中使用or或:

if x == "January" or x == "january":

你的声明:

if x == "January" or "january":
始终返回true,因为其计算结果为:

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

您可以在以下子句中使用or或:

if x == "January" or x == "january":


顺便说一句,这不是一个很好的查找方法,您需要一个月名到月号的映射,例如
month\u map={'january'=>01',…}
然后您可以
print month\u map[x.lower()]
,另一种方法是创建所有名称的列表并返回
index+1
顺便说一句,这不是一个很好的查找方法,您需要月名到月号的映射,例如,
month\u map={'january'=>'01',…}
然后您可以执行
print month\u map[x.lower()]
,另一种方法是创建所有名称的列表并返回
index+1
@TheNOvice,
“一月”
是非emtpy字符串,任何非空字符串的计算结果都是
True
。在
if语句的第二部分中,您不是在测试
x==“Janur”
,而是在测试非emtpy字符串中的“Janur”是否为非emtpy字符串。@TheNOvice,
“Janur”
是非emtpy字符串,任何非空字符串的计算结果均为
True
。在
if语句的第二部分中,您不是在测试
x==“一月”
,而是在测试非emtpy字符串中的“一月”。