2016-07-26 4 views
3

Это упражнение из главы 20 книги Зеда Шоу.Линейная печать в Python

Я пытаюсь понять поведение номера строки.

Когда я использую следующий код, номер строки из текстового файла печатается как 4, что неверно. Это в 3-й строке.

current_line += current_line 

Однако, номер строки показывает правильно, когда я использую следующие

current_line = current_line + 1 

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

Ниже приводится полный код:

from sys import argv 
script, input_file = argv 

def print_all(f): 
    print f.read() 

def rewind(f): 
    f.seek(0) 

def print_a_line(line_count, f): 
    print line_count, f.readline() 

current_file = open(input_file) 

print "First let's print the whole file:\n" 

print_all(current_file) 

print "Now let's rewind, kind of like a tape." 

rewind(current_file) 

print "Let's print three lines:" 

current_line = 1 
print_a_line(current_line, current_file) 

current_line += current_line 
print_a_line(current_line, current_file) 

#current_line = current_line + 1 
current_line += current_line 
print_a_line(current_line, current_file) 
+0

Просто чтобы вы знали, я поддержал этот вопрос и поддержал его, потому что это прекрасный пример хорошо сформированного вопроса начинающего. Вы описали проблему (с ожидаемыми и фактическими результатами), четко изложили свой вопрос и включили [MCVE] (http://stackoverflow.com/help/mcve). Многие новички (программирование и использование переполнения стека) оставляют одно или несколько из них. Пожалуйста, не прекращайте задавать вопросы таким образом. – skrrgwasme

+0

Большое вам спасибо :) - Я буду помнить эти моменты, задавая вопросы, идущие вперёд. – Sarat

ответ

2

current_line + = current_line расширяется к

current_line = current_line + current_line 

Итак, давайте взглянем на то, что вы сделали, дополнив его (Мы будем игнорировать печать заявлений).

current_line = 1 
current_line = current_line + current_line # (1 + 1 = 2) 
#current_line = 2 
current_line = current_line + current_line # (2 + 2 = 4) 
#current_line = 4 

Я думаю, что вы имели в виду использовать

current_line += 1 
+0

Спасибо Тазтинго. Теперь я понимаю. – Sarat

+0

Без проблем :). – Taztingo

0

Вы не увеличивая стоимость от current_line постоянным коэффициентом 1, а вы увеличение по геометрической прогрессии.

current_line += current_line присваивает значение current_line быть собой + себя:

current_line = 5 
current_line = current_line + current_line 
>>> current_line 
>>> 10 

current_line = current_line + 1 или current_line += 1 (+=1является синтаксическим сахаром для увеличения значения на 1) увеличивает значение current_line на 1.

current_line = 5 
current_line = current_line + 1 
current_line += 1 
>>> current_line 
>>> 7 

С current_line является счетчик для номера строки, += 1 следует использовать в этом случае.

+0

Спасибо. Я начинаю программировать, и я не знал, как это работает. – Sarat

+0

@ Сарат Йиеп не беспокоится, держись! – ospahiu

Смежные вопросы