[英]Beautifulsoup: Soupy runny xml, single loop iterate through each item
[英]How to make a for loop iterate through each item in a string with an if statement?
我正在尝试创建一个函数,该函数从用户那里接收一个字符串,然后输出相同的字符串。 然而,对于偶数位置的每个字母,它输出相应的小写字母,对于奇数位置的每个字母,它输出相应的大写字母。 请记住,一次只会传递一个单词。
我试图创建一个 for 循环,其中嵌套了一个 if 语句,但到目前为止,for 循环在遍历第一个字母后停止。 我的代码如下:
def converter(string):
for letters in string:
if len(letters) % 2 == 0:
return letters.lower()
elif len(letters)% 2 != 0:
return letters.upper()
当我运行代码时:
转换器('应用程序')
我得到的输出是'A'
预期的输出应该是“aPp”
您需要知道的第一件事是,在 Python 中,字符串是不可变的。 所以“修改”一个字符串意味着你必须从头开始构建一个新的字符串(在这里,我称之为newstring
)。
其次,你误解了循环。 你说for letters in string
。 此循环遍历字符串的每个字母。 在第一次迭代中, letters
是强的第一个字母。 然后将其转换为大写(因为单个字母的长度始终为 1),然后返回。 你没有到达其余的字母! 在下面的代码中,我将复数更改为仅letter
以明确这个想法。
这修正了所有这些问题:
def converter(string):
newstring = ""
for i, letter in enumerate(string):
if i % 2 == 0:
newstring += letter.lower()
elif i % 2 != 0:
newstring += letter.upper()
return newstring
这可以归结为一个很好的列表理解:
def converter(string):
return "".join([letter.lower() if i % 2 == 0 else letter.upper()
for i, letter in enumerate(string)])
In [1]: def converter(string):
...: return ''.join([j.upper() if i % 2 == 1 else j.lower() for i, j in enumerate(string)])
In [2]: converter('apple')
Out[2]: 'aPpLe'
''.join([s.lower() if c % 2 == 0 else s.upper() for c, s in enumerate('apple')])
# returns 'aPpLe'
首先检查条件,然后使用内置的漂亮的旧enumerate
遍历字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.