如何解决如何解决从列表中打印单词的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 举报,一经查实,本站将立刻删除。