Как распечатать из списка?

Вопрос:

Я только начал изучать питон и системное программирование. Для задания домашней работы мне нужно найти и напечатать n-е простое число. Я написал код ниже — я могу найти список простых чисел, которые меньше или равны n, однако я не знаю, как я могу напечатать nth prime из списка, который я создал. Я продолжаю получать индексную ошибку: индекс индекса за пределами диапазона.

Кажется, я что-то упустил. Может ли кто-нибудь взглянуть на мой код и дать мне некоторое руководство по его устранению? Ваша помощь очень ценится. Спасибо.

import sys
import math


def s_prime(n):
is_prime=list(range(n+1))
for i in range(2, int(n**0.5)+1):
if is_prime[i]:
for j in range(i**2,n+1,i):
is_prime[j]=False
print 'Prime Value in Decimal: ', [x for x in is_prime[2:] if x]
x_list = [x for x in is_prime[2:] if x]
print x_list[n-1]


def main(argv):
input = int(sys.argv[1])
if input == 1:
print 2
elif input == 2:
print 3
else:
n = int(round(input*(math.log(input,2))))
s_prime(n)


if __name__ == "__main__":
main(sys.argv[1:])

Лучший ответ:

Поскольку вы изменили значение n здесь, n = int(round(input*(math.log(input,2)))). Теперь это нечто большее, чем оригинальное n. Например, когда input = 5, n равно 12, и, очевидно, x_list содержит только 5 элементов, поэтому вы получите IndexError поскольку индекс 11 не связан.

Здесь вы можете использовать отрицательную индексацию:

return x_list[-1] чтобы получить последний элемент.

или передать исходный input в основную функцию:

def s_prime(n, inp):
    print n
    #you code here....
    print x_list[inp-1] 

def main(argv):
     #your code
        n = int(round(input*(math.log(input,2))))
        s_prime(n, input) #pass input here

Ответ №1

Проблема здесь в том, что вы генерируете простые числа до n и сохраняете их в списке. Понятно, что в этом списке меньше n элементов, поэтому, когда вы пытаетесь найти nth prime, вы получаете "index out of range error".

Чтобы исправить это, вы можете генерировать простые числа, пока не найдете nth числа, или вы можете выбрать большую верхнюю границу для генерации вашего списка простых чисел. Вы можете использовать это, чтобы помочь вам выбрать эту верхнюю границу.

Оцените статью
TechArks.Ru
Добавить комментарий