我在这里搜索了答案并尝试实施它们但我认为有一些我遗漏的小细节。我有一个非常短的python代码,用于一个程序,它应该返回一个人输入句子的首字母(全名)。例如,输入是Atticus Leonard Beasley,输出应该是
A.L.B.
但我得到了:
A.
L.
B.
这是我的代码:
def main():
full_name = input("Enter your first, middle, and last name: ")
for ch in full_name:
if ch.isupper():
ch = ch.rstrip('\n')
print (ch,'.', sep='')
main()
答案 0 :(得分:0)
仅供参考,您可以使用split
和join
:
def main():
full_name = input("Enter your first, middle, and last name: ")
initials = []
for name in full_name.split():
initials.append(name[0])
print('.'.join(initials) + '.')
main()
或使用列表理解:
def main():
full_name = input("Enter your first, middle, and last name: ")
print('.'.join(name[0] for name in full_name.split())+'.')
main()
答案 1 :(得分:0)
我认为你可以通过更容易的方式来做到这一点,并且更多的pythonic"方式。
full_name = input("Enter your first, middle, and last name: ")
print(''.join([ch[0].upper() + '.' for ch in full_name.split()]))
<强>说明强>
您可以使用split()函数来确保在没有额外空格的情况下处理每个单词,而不是对名称的每个字母进行for
循环。
sentence = "hello world"
for ch in sentence.split():
print(ch) # hello
break
现在,您尝试验证第一个字母是否为uppercase
,但如果用户输入的名称不是uppercase
,则您的功能无效。一个更简单的解决方案是提取单词ch[0]
的第一个字母并自动添加uppercase
:ch[0].upper()
也许单线解决方案令人困惑,但是当解决方案易于阅读时,大多数python开发人员使用list comprehension
而非for
循环。
修改强>
还有一件事,即使您正在编写一个简单的函数,例如打印名称的首字母,您也应该总是相应地编写测试。
一个好的开始方法是使用doctests,因为它会强制你描述你的功能。即使您认为这是浪费时间,但当您的计划变得更大时,它有助于克服许多问题。如果你想尝试写下你的第一个doctest