Pyt*_*ada 2 python function modulo
我正在尝试编写一个函数来提取任何给定单词的所有其他字母。有人可以解释一下为什么这段代码不产生所有其他字母吗?
def other_letter(word):
other_letter = ""
for letter in word:
if word.index(letter) % 2 == 0:
other_letter += letter
return other_letter
print(other_letter("Hello World!"))
Run Code Online (Sandbox Code Playgroud)
我认为如果索引的模等于 0 那么它应该拉出所有其他字母并将其添加到other_letter? 我找到了另一种方法来解决这个问题,无需模运算符,但我想知道为什么模运算符在这里不起作用?
您面临的问题是,在代码中,您正在检查单词中字母的索引。这意味着它找到字母的第一个实例,而不是当前实例。
即"l"始终是索引2,"o"始终是索引4,因此所有 l 和 o 都将出现在结果字符串中,而不仅仅是第一个"l"和第一个"o"。
要在跟踪索引的同时迭代 Iterable,您可以使用enumerate生成索引、值对的 Iterable。但在这种情况下,它仍然不是最简洁的解决方案。
一个更简单的解决方案是对括号运算符使用skip参数。
当用于[]包含字符串的序列时,第一个参数是开始索引,第二个参数是结束索引(最后一个元素之后),第三个参数是跳过量。
如果省略开始和结束索引,则只需迭代整个字符串,并且仍然可以应用skip参数来跳过一定数量的字母。
def other_letter(word: str):
"""Return a string of every other letter in word."""
return word[::2]
Run Code Online (Sandbox Code Playgroud)
例子:
>>> word = "Hello World!"
>>> print(word[::2])
'HloWrd'
Run Code Online (Sandbox Code Playgroud)
如果你想从第二个字母开始,你可以使用起始索引为 1 而不是默认的 0:
>>> print(word[1::2])
'el ol!'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
60 次 |
| 最近记录: |