2014-02-25 2 views
0

Вот моя версия кода прямо сейчас, и я продолжаю получать ошибку индекса списка.Ошибка индекса списка Python

n = 0 
y = len(list1)-1 
while n < y: 
    for k in list1: 
     if list1[n]+ k == g: 
      print("The 2 prime numbers that add up to ",g,"are ", list1[n]," and ",k,".") 
      break 
     else: 
      n = n+1 
+0

Какая ошибка индекса списка? Где? Каково точное сообщение об ошибке? – Kevin

+0

if list1 [n] + k == g: IndexError: list index out of range – user3349164

+0

какая строка была включена? – Kevin

ответ

2

Вы приращение n в петле for но тестирование его contraint во внешнем while цикле.

Возможно, это то, что вы хотели:

n = 0 
y = len(list1)-1 
found = 0 
while n < y: 
    for k in list1: 
     if list1[n]+ k == g: 
      print("The 2 prime numbers that add up to ",g,"are ", list1[n]," and ",k,".") 
      found = 1 
      break # for loop 
    if found: 
     break # while loop 
    n = n + 1 

Гораздо лучший способ сделать это с помощью itertools.combinations_with_replacement:

import itertools 
for (v1,v2) in itertools.combinations_with_replacement(list1, 2): 
    if v1 + v2 == g: 
     print("blah blah blah") 
     break 

combinations_with_replacement(list1,2) возвратит все неупорядоченные комбинации двух элементов list1. Например, combinations_with_replacement('ABC', 2) --> AA AB AC BB BC CC

+0

thank u, но ошибка все еще находится на рассмотрении: – user3349164

+0

в главном , если list1 [n] + k == g: IndexError: список указателей за пределами допустимого диапазона – user3349164

+0

Теперь я вижу, спасибо u soo much! я думаю, что цикл теперь работает – user3349164

0

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

y = len(list1) - 1 
while n < y: 
    for n, k in enumerate(list1): 
     if list1[n]+ k == g : 
      print("The 2 prime numbers that add up to ",g,"are ", list1[n]," and ",k,".") 
      break 

Однако вам не нужен индекс, два для петель совершают одно и то же.

target = 8 
primes = [2, 3, 5, 7, 11, 13, 17, 19] 
message = 'The 2 prime numbers that add up to {target} are {value1} and {value2}' 
for index1, value1 in enumerate(primes): 
    for value2 in primes[index1 + 1:]: 
     if value1 + value2 == target: 
      print(message.format(target=target, value1=value1, value2=value2)) 
Смежные вопросы