2014-11-20 2 views
0

Я пытаюсь сделать проект Эйлера проблемы 8. Вот общая идея, что я делаю:Почему мой список становится короче и короче?

  • Я спасаю номера они дали в текстовом файле;
  • Я читаю числа из файла в список;
  • Я проверяю продукт каждого 13-го числа в строке; и
  • сейчас я вывод, что набор из 13 чисел, составляющие куски (я сделал это потому, что мой выход продолжал выходить неправильно, поэтому я, убедившись, что моя программа правильно читает каждый кусок.)

У меня появилось несколько проблем с моей программой, и в моем процессе устранения неполадок я обнаружил, что по какой-то причине мой список, в котором хранится текущая строка, сокращается до тех пор, пока он не существует. Я не знаю, почему это происходит, что я могу сделать, чтобы это исправить?

Вот мой исходный код:

with open("product.txt") as f: 
    array = [] 
    for line in f: 
     line = line.split() 
     if line: 
      line = [int(i) for i in line] 
      array.append(line) 

def product(k): #Largest product of row k 
    i = 0 #The start of the chunk of 13 terms 
    row = str(array[k][0]) 
    while i < len(row) - 12: #Stop when i is 13 characters away from end of row 
     j=0 #The start of our run-through of the chunk 
     total = 1 #Set this value to 1 so that we can compare the next chunk of 13 
     while j < 13: #Go outward to the 12th element only since we include 0 
      total = total * int(row[i+j]) #The first character * the next 12 
      j += 1 
      #End of j while 

     print (row[i:13]) #To verify that the program is reading size 13 blocks 
     i += 1 #End of i while 

    return total 

print (product(0)) 

Текстовый файл просто скопировать и вставить чисел от problem 8.

ответ

6

Ваш список не сокращается нигде, вы просто печать меньший и меньший фрагмент.

Вы используете фиксированную конечную точку для вашего среза:

print (row[i:13]) 

Вы хотите, чтобы сделать эту конечную точку относительно начала:

проблем
print(row[i:i + 13]) 
+0

Благодарим за разъяснение этого! Я сталкивался с этим, когда читал, что, как я уже сказал, я не так много разбираюсь в программировании, особенно на питоне, я просто начал его подбирать. – Seraphim

0

Эйлера идеально подходят для обучения основ многих компьютерных языков, особенно python. Euler 8 может быть одним строковым кодом, например:

print max([reduce(lambda x,y: x*y,map(int,input_string[i:i+13])) for i in xrange(len(input_string)-13)]) 
Смежные вопросы