有人可以帮助我理解为什么此代码两次返回第一个字母吗?目的是将字符串的第一个和第四个字母大写。
def old_macdonald(name):
newname=''
for i,letter in enumerate(name):
if i==0:
newname+=letter.upper()
if i==3:
newname+=letter.upper()
else:
newname+=letter
return newname
old_macdonald('Macdonald')
输出:
MMacDonald # when it should be MacDonald instead of MM
答案 0 :(得分:3)
第二条if
语句应为elif
:
def old_macdonald(name):
newname=''
for i,letter in enumerate(name):
if i==0:
newname+=letter.upper()
elif i==3:
newname+=letter.upper()
else:
newname+=letter
return newname
old_macdonald('Macdonald') # 'MacDonald'
在您的代码中,在第一个字母上,第一个if
语句运行,追加一个字母,移至第二个if
语句,失败,移至else
语句,然后追加另一个字母,从而复制第一个字母。将第二个if
更改为elif
,可以确保仅执行三个块之一。
答案 1 :(得分:2)
正如Tomothy所提到的那样,问题在于将python中if ... else
语句的条件及其解释方式进行堆叠。
if i==0:
newname+=letter.upper() #When i is 0 newname wil be changed to `M`
if i==3: # Here i is still 0 but the condition fails
newname+=letter.upper()
else: # This is an else statement after a filed if, so it will be executed
newname+=letter # Here i is still 0 and this part executes and causes duplication
elif
可以解决您的问题,告诉python您希望将if
,elif
和else
当作一个单独的逻辑单元进行评估。
答案 2 :(得分:0)
或使用:
def old_macdonald(name):
newname=''
for i,letter in enumerate(name):
if i==0:
newname+=letter.upper()
if i==3:
newname+=letter.upper()
if i not in [0,3]:
newname+=letter
return newname
print(old_macdonald('Macdonald'))
输出:
MacDonald