Python 有条件的isn';不起作用。它应该是一个if语句,但是if语句执行我所有的语句,而不仅仅是我需要的少数语句

Python 有条件的isn';不起作用。它应该是一个if语句,但是if语句执行我所有的语句,而不仅仅是我需要的少数语句,python,conditional-statements,Python,Conditional Statements,这应该是格式化名称以打印它们,当它们有一个McLastname时,它会修复大小写,但是当我输入任何姓氏时,它会用Mc替换前两个字母,即使名称不是以Mc开头。如果我输入一个姓氏,比如史密斯,它会将其更改为McIth。如果名称以Mc或Mc开头,是否有任何方法可以更改此名称,使其仅更改前两个字母Mc?谢谢。如果名称2[0:1]=“mc”或“mc”: 应该是 如果名称2[0:1]=“mc”或名称2[0:1]=“mc”: 否则,此if语句始终为true,因为“MC”为true。此语句: #Just def

这应该是格式化名称以打印它们,当它们有一个McLastname时,它会修复大小写,但是当我输入任何姓氏时,它会用Mc替换前两个字母,即使名称不是以Mc开头。如果我输入一个姓氏,比如史密斯,它会将其更改为McIth。如果名称以Mc或Mc开头,是否有任何方法可以更改此名称,使其仅更改前两个字母Mc?谢谢。

如果名称2[0:1]=“mc”或“mc”:

应该是

如果名称2[0:1]=“mc”或名称2[0:1]=“mc”:

否则,此if语句始终为true,因为“MC”为true。

此语句:

#Just defining strings needed for later
Mc = "Mc"
O = "O'"

#What is your name?
name = raw_input('What is your first name?')
name2 = raw_input('What is your last name?')

#Setting up the grammar for all of these weirdly typed names
game = name.lower()
game2 = name2.lower()
lame = game[1:len(game)]
lame2 = game2[1:len(game2)]
Name = game[0].upper() + lame
Name2 = game2[0].upper() + lame2

#For the names with a Mc in it
if Name2[0:1] == "mc" or "MC":
    Last_Name = Mc + Name2[2].upper() + Name2[3:len(Name2)]

#For the names with an O'name in it
elif Name2[0:1] == "O'" or "o'":
    Last_Name = O + Name2[2].upper() + Name2[3:len(Name2)]

#For the regular names
else:
    Last_Name = Name2

#For the liars
if len(Name) + len(Name2) > 25:
    print "STOP LYING!"

#Lets finally print this beast
else:
    print "Welcome " + Name + " " + Last_Name + "!"
这永远是真的。这相当于说,名称以“mc”开头是真的还是“mc”是真的?但是在Python中,非空字符串总是真的,所以第二部分总是真的,所以整个事情总是真的

你的意思是写:

 if Name2[0:1] == "mc" or "MC":
但也会写

 if Name2[0:1] == "mc" or Name2[0:1] == "MC":

 if Name2[0:1] in ("mc", "MC"):
 if Name2[0:1].upper() == "MC":