为什么会出现这么奇怪的bug?

悟空又丢了 2020-08-10 03:24:07
功能是将首字母大写,其他小写。
问题:只要第一个字母是小写,那么这个字符串的其他的这个字母就都会变为大写。

代码:
def normalize(name):
L=len(name)
for i in range(1,L):
if(65 <= ord(name[i]) <= 90):
name = name.replace(name[i],chr(ord(name[i])+32))

if(97 <= ord(name[0]) <= 122):
name = name.replace(name[0],chr(ord(name[0])-32))
return name

# 测试:
L1 = ['adam', 'LISA', 'aarT']
L2 = list(map(normalize, L1))
print(L2)
L3 = ['adam', 'LISA', 'babT']
L4 = list(map(normalize, L3))
print(L4)


输出:
['AdAm', 'Lisa', 'AArt']
['AdAm', 'Lisa', 'BaBt']


初学者,不知道有什么知识漏洞导致我不理解。请赐教。
...全文
110 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
悟空又丢了 2020-08-11
  • 打赏
  • 举报
回复
谢谢解答,感谢
rrrr336 2020-08-10
  • 打赏
  • 举报
回复
你的程序问题出在 replace 函数: string.replace(oldvalue, newvalue, count) replace 函数有三个参数,count: Default is all occurrences, 就是代替所有相同的字母 改成: name.replace(name[i],chr(ord(name[i])+32),1) PS: 要完成首字母大写,直接调built-in 函数capitalize()就可以:
def normalize(name):
    return name.capitalize()

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧