为什么我的列表索引在此 for 循环中超出范围?

问题描述 投票:0回答:1

我在空闲时间一直在学习哈佛的 CS50 Python 课程,并且正在研究问题集 2。该问题要求您编写一个程序,该程序接收用户输入,然后输出输入但不包含任何值。我在 for 循环中遇到了“IndexError:列表索引超出范围”错误,该错误用于删除已识别的元音。

最初,我没有考虑到删除一个字符后,整个字符串的长度也会减少 1,但我通过让索引“i”从元音内的值减去自身来解释这一点大批。在我收到错误之前,该程序似乎可以处理大约 5 个元音,但是在纸上写出我的逻辑后,我只是看不出哪里出了问题。

另外,请随意对我的代码发表评论,总的来说,我是一个完全的初学者,在 MATLAB 方面只有少量经验。

如有任何建议,我们将不胜感激,谢谢!

代码:

text = str(input("Input: ")).strip()

# find positions of vowels

vow_pos = []
vowels = ["A","a","E","e","I","i","O","o","U","u"]
k = 0
for i in range(len(text)):
    for k in range(len(vowels)):
        if text[i].find(vowels[k]) != -1:
            vow_pos.append(i)
        k = k + 1

# delete vowels based on position
for j in range(len(vow_pos)):
    if j > 0:
        vow_pos[j] = vow_pos[j] - j
        text = text.replace(text[vow_pos[j]],"")
    else:
        text = text.replace(text[vow_pos[j]],"")


print("Output: " + str(text))
python for-loop indexing cs50
1个回答
0
投票
for k in range(len(vowels)):
    :
    k = k + 1

for
循环本身正确地迭代
k
,您不应该在循环体内手动调整它。

© www.soinside.com 2019 - 2024. All rights reserved.