如何修复从列表中打印单词的 IndexError 问题
How to fix an IndexError Problem for printing words from a list
对于我的开始 python class 我们必须编写一个代码来确定一个数字是否为素数,找出句子中的平均单词长度,确定句子中哪些单词具有素数长度, 然后打印具有质数长度的单词。 (我们不需要担心此作业的标点符号)所以我编写了以下代码,但是当我尝试打印具有素数长度的单词时,它返回 list index out of range 代码在第一个 for 循环中运行良好,并且 returns 对于输入的素数长度都是正确的,但我无法让它打印出实际的单词。请帮忙!
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
将第二个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:",PRIME,"\n NON PRIME",NON_PRIME)
输出
请输入随机句子(或输入 'quit' 退出):PRIME CHECKER WITH PYTHON
总理:[['PRIME', 5], ['CHECKER', 7]]
非素数 [['WITH', 4], ['PYTHON', 6]]
在你的第二个循环中, i 的值将是单词的长度,而 word_list 的长度是不同的,假设句子是:“我是学生”然后列出 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]))
对于我的开始 python class 我们必须编写一个代码来确定一个数字是否为素数,找出句子中的平均单词长度,确定句子中哪些单词具有素数长度, 然后打印具有质数长度的单词。 (我们不需要担心此作业的标点符号)所以我编写了以下代码,但是当我尝试打印具有素数长度的单词时,它返回 list index out of range 代码在第一个 for 循环中运行良好,并且 returns 对于输入的素数长度都是正确的,但我无法让它打印出实际的单词。请帮忙!
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
将第二个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:",PRIME,"\n NON PRIME",NON_PRIME)
输出
请输入随机句子(或输入 'quit' 退出):PRIME CHECKER WITH PYTHON
总理:[['PRIME', 5], ['CHECKER', 7]]
非素数 [['WITH', 4], ['PYTHON', 6]]
在你的第二个循环中, i 的值将是单词的长度,而 word_list 的长度是不同的,假设句子是:“我是学生”然后列出 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]))