我想知道为什么我的函数不会调用字符串中字符的索引。我为此使用了for循环,由于某种原因,它只是列出了字符串的所有可能索引。我做了一个特定的if语句,但我不明白为什么它不遵循指示。
def where_is(char,string):
c=0
for char in string:
if char==(string[c]):
print (c)
c+=1
else:
print ("")
where_is('p','apple')
答案 0 :(得分:1)
您的循环正在覆盖您的参数char
。一旦进入循环,它就会被字符串中的字符覆盖,然后您将其与自身进行比较。重命名参数或循环变量。此外,您的计数器增量c+=1
也应该在if
之外。无论您是否找到匹配项,都希望增加索引,否则您的结果将会关闭。
就风格问题而言,你真的不需要else
阻止,print
调用只会给你额外的换行符,你可能不需要。
答案 1 :(得分:0)
问题是给定的代码迭代了存储在字符串中的所有内容,并且每次“c”的值增加并打印时它都匹配。 我认为你的代码应该是:
def where_is(char, string):
for i in range(len(string)):
if char == (string[i]):
print(i)
where_is('p', 'apple')
这将打印'apple'中所有'p'的索引。
答案 2 :(得分:0)
首先,你使用的索引在else部分没有增加,其次,在迭代字符串时,我通常更喜欢while循环到for循环。稍微修改一下代码,看看这个:
def where_is(char,string):
i=0
while i<len(string):
if char==(string[i]):
print (i)
else:
print ("")
i+=1
where_is('p','apple')
输入:where_is('p','apple')
输出:1 2
答案 3 :(得分:0)
正如评论中所提到的,你在for循环中没有正确增加。你想循环遍历单词,每次递增并在找到字母时输出索引:
def where_is(char, word):
current_index = 0
while current_index < len(word):
if char == word[current_index]:
print (current_index)
current_index += 1
where_is('p', 'apple')
返回:
1
2
或者,通过使用enumerate
和列表理解,您可以将整个内容减少到:
def where_is(char, word):
print [index for index, letter in enumerate(word) if letter == char]
where_is('p', 'apple')
将打印:
[1,2]
然后,您还可以选择return
- 创建您创建的列表,以便进一步处理。