#python #for-loop #while-loop
#python #для цикла #цикл while
Вопрос:
Приведенный ниже цикл «for» успешно выводит все строки, начинающиеся с «From», из текстового файла:
fhand = open('mbox-short.txt')
for line in fhand:
if line.startswith('From:'):
print(line)
Теперь я пытаюсь воспроизвести результат, используя «цикл while», как показано ниже:
line_count =0
line =0
for i in fhand:
line_count = line_count 1
print("Total lines:", line_count)
while line < line_count:
if line.startswith("From:"):
print(line)
line = line 1
РЕЗУЛЬТАТ: AttributeError: объект ‘int’ не имеет атрибута ‘startswith’
Есть ли что-то, что я здесь делаю неправильно?
Комментарии:
1.
startswith()
Функция не может использоваться для целых чисел (вы инициализированыline
как целое число ‘)2. не могли бы вы объяснить, что вы хотите, чтобы ваш измененный код выводил?
3. Спасибо Vedank. Я хочу, чтобы код отображал список строк, начинающихся с «From». Уже упомянутый «цикл for» успешно выполнил это.
4. Хорошо, я вижу, где я ошибся, и я скорректировал код в соответствии с приведенным ниже. fhand = open(‘mbox-short.txt ‘) line_count =0 count =0 для строки в fhand: line_count = line_count 1 #print(«Всего строк:», line_count) в то время как count<line_count: если line.startswith(‘From:’): print(строка) count= count 1Теперь, хотя ошибок больше нет, я получаю пустой вывод.
Ответ №1:
Ваша переменная line=0
должна быть заменена на line1=0
Комментарии:
1. Хорошо, спасибо Engr1hmh, вместо этого я изменил назначение с line = 0 на count = 0 . Теперь в дополнение к переменной «count» я изменил блок while на приведенный ниже. в то время как count<line_count: если line.startswith(«From»): print (line) count= count 1 Теперь я вообще не получаю никаких выходных данных. Это довольно странно. Я ожидаю, что оператор print line напечатает все строки со строкой «From».
2. Вам нужна эта полная строка
for line in fhand: if line.startswith('From:'): print(line)
послеwhile count< line_count:
3. Спасибо Engr1hmh, я уже упоминал, что для этого упражнения работает цикл «for»: fhand = open (‘mbox-short.txt ‘) для строки в fhand: если line.startswith(‘From:’): печать (строка) Вышеизложенное дает мне результаты, которые мне нужны без проблем. Теперь я хочу использовать цикл while сам по себе для печати моего вывода … за исключением того, что это задача, предназначенная только для цикла for .
4. Теперь я понял, в этой строке вашего кода
while line < line_count: if line.startswith("From:"): print(line) line = line 1
заменитеline
наi
Ответ №2:
В вашем первом коде строка соответствует строке .txt, которая будет строковым значением.
fhand = open('mbox-short.txt')
for line in fhand:
if line.startswith('From:'):
print(line)
В то время как в другом коде вы объявляете строку как значение int:
line =0
Редактировать:
Обычно цикл for здесь наиболее эффективен, а не while. Но если вам вообще нужно попробовать использовать цикл while, это будет так:
fhand = open("mbox-short.txt", "r")
# readlines() returns a list of strings on each line of .txt
lines = fhand.readlines()
# Calculate the number of lines
line_count = len(lines)
line = 0
while not line >= line_count:
# Print each index element from the list which are lines from .txt
print(lines[line])
line = 1
fhand.close()
Комментарии:
1. Спасибо Neeraj. Итак, я попытался изменить код, добавив другую переменную «count» fhand = open (‘mbox-short.txt ‘) line_count =0 count =0 для строки в fhand: line_count = line_count 1 print(«Всего строк:», line_count) в то время как count<line_count: если строка.начинается с(«From»): print (line) count= count 1 Что я пытался сделать, так это позволить консоли использовать элемент «line», уже инициализированный в предыдущем цикле «for», но теперь я не получаю ошибку и не получаю никаких результатов… Я получаю пустой вывод.
2. почему вы хотите использовать цикл while здесь? в этом вам нужно получить доступ к строке результата, который вы получаете после открытия файла .txt в режиме чтения. В любом случае я отредактировал ответ и включил, если вам вообще нужно использовать цикл while вместо for
3. Спасибо Neeraj, я просто хотел убедиться, что все, что может делать цикл for, может делать и цикл while. Но я ценю разъяснение.
4. рад, что смог помочь 🙂 дайте мне знать, если вам нужна более подробная информация по вашему запросу