微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何解决从列表中打印单词的IndexError问题

如何解决如何解决从列表中打印单词的IndexError问题

对于我的起始python类,我们必须编写代码来确定数字是否为质数,找到句子中的平均单词长度,确定句子中哪些单词具有质数长度,然后打印具有质数长度的单词。 (我们不必为此作业担心标点符号)因此,我编写了以下代码,但是当我尝试打印具有质数长度的单词时,它会返回列表索引超出范围代码在第一个for循环中运行良好,并且无论输入了多少素数长度,都返回True,但是我无法获取它来打印实际单词。请帮忙!

from statistics import mean


def is_prime(n):
    if n < 2:
        return(False)
    else:
        for i in range(2,n + 1):
            if n == 2:
                return(True)
                break
            elif n % i == 0:
                return(False)
                break
            else:
                return(True) 
                break   
    return


user_input = " "
while user_input != "quit":
    user_input = input("Please enter a random sentence (or type 'quit' to exit): ")
    word_list = user_input.split()
    x = len(word_list)
    word_length = []

    for i in range(x):
        word_length.append(len(word_list[i]))


    for i in word_length:
        if is_prime(i) == True:  
            print(word_list[i])             #I think this is where the problem is???
          
            

    avg = mean(word_length)
    print("Average word length: " + str(avg))
    print("The following words have prime lengths: ")
    
    

while user_input == "quit":
    print("Goodbye!")
    break

解决方法

在第二个循环中,我的值i将是单词的长度,而word_list的长度是不同的,假设sendense是:“我是学生”,则列出word_length看起来像[1,2,1,7]并打印word_list [1],word_list [2],word_list [1]和word_list [7],但是word_list的长度为4,因此它会为word_list [7]提供IndexError,因此正确的代码如下所示如下:

 for i in range(x):           #here,i starts from 0 and ends at length of word_list
    if is_prime(len(word_list[i])) == True:     
        print(word_list[i])

以下循环不是必需的。

for i in range(x):
    word_length.append(len(word_list[i]))
,

将第二个for循环更改为-

for i in range(len(word_length)):
    if is_prime(word_length[i]) == True:  
        print(word_list[i])             #I think this is where the problem is???

您正在使用实际的单词长度来访问索引列表,如果word_list中的元素数不等于单词长度,该列表将不起作用。遍历range(len(word_length))可以解决问题

,
user_input,PRIME,NON_PRIME = '',[],[]
while user_input != "quit":
    user_input = input("Please enter a random sentence (or type 'quit' to exit):")
    if user_input == "quit":break
    else:
        for i in user_input.split(" "):#user_input text converted to list with separator = ','
            #PRIME CHECK
            if len(i) > 1:
                for j in range(2,len(i)):
                    if (len(i)% j) == 0:
                        NON_PRIME.append([i,len(i)])
                        break
                else:PRIME.append([i,len(i)])
             else:NON_PRIME.append([i,len(i)])
        print(" PRIME:","\n NON PRIME",NON_PRIME)

输出 请输入随机句子(或输入“ quit”退出):PRIME CHECKER WITH PYTHON PRIME:[['PRIME',5],['CHECKER',7]]
非总理[['WITH',4],['PYTHON',6]]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。