本帖最后由 paypojie 于 2022-7-1 12:40 编辑
题目: 利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。
题目来自于该链接 https://www.liaoxuefeng.com/wiki/1016959663602400/1017329367486080
如果不利用map()函数 很简单 下面的代码即可解决问题
[Python] 纯文本查看 复制代码 name = input()
def normalize(name):
return name[0].upper() + name[1:].lower()
print(normalize(name))
函数normalize里面用了切片的办法 将索引为零的位置的值大写 索引为一以及一以后的位置的值小写
但是题目要求用map()函数来规范用户输入 于是 开始写代码 写的过程思路有点零散
我是这样想的 大体思路 先定义一个函数 通过函数传进来的值全部小写 再用for循环 第一次循环用普通方法将用户输入的字符串首字母大写 第二次循环及以后 用map()函数将字符串首字母之后的字母全部转换为小写 然而 实际写的过程中却是痛苦而用漫长 写了有大半个小时 (不太熟练 思维混乱 精神状态不佳 )
第一步
[Python] 纯文本查看 复制代码 name = input() # 将用户的输入赋值到name变量中
第二步
[Python] 纯文本查看 复制代码 def normalize(name):
# if name.isalpha() == True:
name = name.lower()
return name
这个函数的作用很简单 就是将传进来的实参全部小写 被注释的表示那行语句是多余的 可有可无 (注释语句没鸟用) 这个函数的用处 一看就知
第三步 for循环
[Python] 纯文本查看 复制代码 for i in range(len(name)):
if count == 0:
l = list(name)[0] = name[0].upper()
s += l
else:
l1 = (list(map(normalize,name[i])))
s += l1[0]
count += 1
写到这里的时候 又新增了两个变量 count和s 一个用来计数 计数用来判断当前循环的是第几次 如果是第一次就执行if下的语句 否则执行else下的语句 s用来保存值 for循环的最后一行语句表示每循环一次 计数就加一 实际上 第一次循环执行if分支语句 第二次以及后面的n次循环就执行else分支语句 最后输出值
完整代码
[Python] 纯文本查看 复制代码 name = input()
count = 0
s = ''
def normalize(name):
# if name.isalpha() == True:
name = name.lower()
return name
for i in range(len(name)):
if count == 0:
l = list(name)[0] = name[0].upper()
s += l
else:
l1 = list(map(normalize,name[i]))
s += l1[0]
count += 1
print(s)
改写封装之后的代码
[Python] 纯文本查看 复制代码 def namefunc():
name = input('请输入用户名:'); count = 0; s = ''
def normalize(name):
return name.lower()
for i in range(len(name)):
if count == 0:
l = list(name)[0] = name[0].upper()
s += l
else:
l1 = list(map(normalize,name[i]))
s += l1[0]
continue
count += 1
print(s)
namefunc()
运行截图
|