我试图这样做,以便当一个人输入他们的名字时,只有首字母显示大写并以句点分隔。我无法弄清楚我写的这段代码有什么问题......帮帮忙!
def main():
name = input('Type your name and press ENTER. ')
name_list = name.split()
print(name_list)
first = name[0][0]
second = name[1][0]
last = name[2][0]
print(first,'.', second,'.')
main()
答案 0 :(得分:8)
如果您使用的是Python 2.x,则应该为raw_input交换输入。这是一个更快的方法来实现你的目标,假设你使用的是Python 2.x:
def main():
full_name = raw_input('Type your name and press ENTER. ')
initials = '.'.join(name[0].upper() for name in full_name.split())
print(initials)
答案 1 :(得分:0)
def main():
name = input('Type your name and press ENTER. ')
name_list = name.split()
print(name_list)
first = name_list[0][0]
second = name_list[1][0]
last = name_list[2][0]
print(first.upper(),'.', second.upper(),'.', last.upper())
main()
答案 2 :(得分:0)
这是一个类似于你的版本。
请注意,您使用的是name
而不是name_list
,以及一些硬编码索引。
def main():
name = input('Type your name and press ENTER. ')
name_list = name.split()
for part in name_list:
print(part[0].upper() + ". ", end="")
print()
main()
它循环使用split()
创建的列表,并打印名称每个部分的第一个字母(大写)。
如果你想要包含每个部分,那么循环才有意义。
答案 3 :(得分:0)
我会尝试解释它为什么会发生而不只是给你解决方案。
当name
是您打算使用的时候,您正在使用name_list
而不是name_list
。
name
的 'Amanda Leigh Blount' = 'Amanda Leigh Blount'
但是name_list = name.split() = ['Amanda', 'Leigh', 'Blount']
所以你只能在中间/姓氏上获得两者的差异。
第一个名字对于两者都是等价的:
name[0][0] == name_list[0][0]
左侧与第一个字母的第一个字母相匹配:
'Amanda Leigh Blount'[0][0] = 'A'[0] = 'A'
右侧与第一个单词的第一个字母相匹配。
['Amanda', 'Leigh', 'Blount'][0][0] = 'Amanda'[0] = 'A'
但是对于第二个:
name[1][0] != name_list[1][0]
'Amanda Leigh Blount'[1][0] = 'm'[0] = 'm'
['Amanda', 'Leigh', 'Blount'][0][0] = 'Leigh'[0] = 'L'
所以只需使用name_list
代替name
:
first = name_list[0][0]
second = name_list[1][0]
last = name_list[2][0]