我的教授向我们展示了一些我们可以用来显示名字首字母的代码,但是她从未解释过它是如何工作的。教科书也没有多大帮助。我只在第二行感到困惑。这不是作业;我只想知道是什么让它显示字符串中的第一个字母。
这个Python字符串代码是如何工作的?
userName = input("Enter your name: ")
initials = '.'.join(name[0].upper() for name in userName.split())
print(initials)
我的教授向我们展示了一些我们可以用来显示名字首字母的代码,但是她从未解释过它是如何工作的。教科书也没有多大帮助。我只在第二行感到困惑。这不是作业;我只想知道是什么让它显示字符串中的第一个字母。
这个Python字符串代码是如何工作的?
userName = input("Enter your name: ")
initials = '.'.join(name[0].upper() for name in userName.split())
print(initials)
说出输入运行后的userName = "john paul jones"
。
然后userName.split()
拆分空白名称' '
的名称,返回一个由字符串“john”,“paul”,“jones”(按该顺序)组成的列表。
移到该该for name in userName.split()
部分迭代 - 因此name
依次势必"john"
然后"paul"
然后"jones"
。
当name
与例如"paul"
表达式name[0]
返回第一个字符(例如'p'
),然后将其转向相应的大写(如果它不是大写)。最终的结果是发电机表达
(name[0].upper() for name in userName.split())
陆续返回字符串'J'
然后'P'
然后'J'
(在我们的例子)。
最后,join
需要一个字符串迭代并将它们连接在一起,使用作为分隔符是联接称为弦上 - 在这种情况下'.'
- 认为这定界符当保持字符串可迭代的胶水一起。如此加入 - 最终结果为"J.P.J"
。
你的老师可能应该在表达式的末尾加上+'.'
以得到最后一段时间("J.P.J."
)。
其实最后的结果是在这种情况下的J.P.J'。 –
@KevinGuan谢谢。 –
userName = input("Enter your name: ")
首先,用户名是一个字符串,例如我的名字:kevin guan
。现在
'.'.join(name[0].upper() for name in userName.split())
,name[0].upper() for name in userName.split()
是发电机理解(它给发电机):
userName.split()
给像['kevin', 'guan']
列表。
name[0].upper() for name in ['Kevin', 'Guan']
你会得到['K', 'G']
,因为name[0]
是在第一for
环k
,然后.upper()
隐蔽它K
并将其保存到列表(实际上它是一个生成)。 而在第二个循环中,我们得到了G
。
然后,'.'.join
给出K.G
。欲了解更多信息,请查看有关str.join()
和generator comprehension的文件。
让我们把它拆开:
initials = '.'.join(name[0].upper() for name in userName.split())
有一个内环这里,for name in userName.split()
。这是将userName中的字符串拆分为块或name
s。 split()的文档说:
返回字符串s的单词列表。如果可选的第二个 参数sep不存在或无,则这些单词由任意 字符串的空格字符(空格,制表符,换行符,返回, 换页符)分隔。
所以,如果字符串包含空格,它会按照您的预期拆分字符串。 "my lastname"
将被分成列表["my", "lastname"]
。该列表成为for
循环中的名称列表。在这种情况下,name
将成为值"my"
和"lastname"
。我们有神秘的功能name[0].upper()
。这适用于来自for
循环的每个值name
。第一部分name[0]
取name
中字符串的第一个字符。第二部分,.upper()
将第一个字符(实际上是一个字符的字符串)转换为大写字符。这在上面的相同文档中有描述。
继续我们的例子,name[0].upper()
需要两个字符串"my"
和"lastname"
,从每一个需要的第一个字母,并将其转换为大写:"M"
和"L"
。结果列表是["M", "L"]
。
最后,'.'.join()
表达式采用join()
的内部列表,并使用'.'
字符将它们连接在一起。在这种情况下,结果是"M.L"
。
第二行包含字符串索引,一个生成器表达式以及对'str.join','str.upper'和'str.split'的调用。这些是你不熟悉的东西吗? – senshin
此代码是越野车;最后的首字母并不是一个句点。 – user2357112