Python readline () внутри функции пропускает вторую строку в файле - PullRequest
0 голосов
/ 06 ноября 2018

Я абсолютный новичок в области программирования. Я делаю упражнения из книги и кое-что я не понимаю. Я использую команду readline () внутри функции, а затем запускаю цикл for в main (), чтобы найти наибольшее число в файле. Файл содержит список чисел в каждой строке: наибольшее число находится во второй строке, но по какой-то причине программа пропускает вторую строку (которая содержит наибольшее число). Это код:

def reader(filename):
    nums = filename.readline()
    return(nums)

def main():
    filename = open("numbers.txt", 'r')
    largest = reader(filename)
    for line in filename:
        number = reader(filename)
        if number > largest:
            largest = number

    print("The largest number is:", largest)

main()

Но когда я помещаю readline () в функцию main () и изменяю параметр внутри цикла, все работает нормально:

def helper(filename):

    nums = filename
    return(nums)

def main():

    filename = open("numbers.txt", 'r')
    largest = helper(filename.readline())
    for line in filename:
        number = helper(line)
        if number > largest:
            largest = number

    print("The largest number is:", largest)

main()

Очевидно, что я что-то упускаю, но я точно не знаю, что это такое.

Ответы [ 3 ]

0 голосов
/ 06 ноября 2018

Вы пропускаете все четные строки. Сначала вы читаете строку:

largest = reader(filename)

тогда вы читаете еще один

for line in filename:

note line содержит вторую строку. Наконец, время 3d:

nums = filename.readline()

вы полностью игнорируете второе чтение, так как вы не используете line. Это, конечно, будет продолжено в следующем цикле - прочитайте 4-ю строку, не обращайте на нее внимания и получите 5-ю и т. Д.

Также обратите внимание, что вы не удаляли символы новой строки (чтение строки оставляет \n) или преобразование в int, поэтому вы сравниваете строки.

0 голосов
/ 06 ноября 2018
def main():
    filename = open("numbers.txt", 'r')
    largest = -1
    for line in filename:
        if int(line) > int(largest):
            largest = line


    print("The largest number is:", largest)

main()
0 голосов
/ 06 ноября 2018

for line in filename: читает каждую строку в файле.

Вызов readline() внутри такого цикла, как вы делаете в первом примере кода, приведет к тому, что цикл for пропустит эту строку, так как он был использован readline() и больше не доступен для использования. по петле for.

Второй пример кода не имеет этой проблемы, потому что вы больше не вызываете readline() внутри цикла for line in file:.

...