Возврат в python, чтение значений из файла .txt - PullRequest
0 голосов
/ 20 ноября 2018

Уровень: начинающий

Эй, я пытаюсь разрешить упражнение в Python.

Код сравнивает userName, указанное в аргументе функции print(getUserPoint("Benny")), если это имя существует в userScores.txt, я хотел бы вернуть счет пользователя, в противном случае я хотел бы вернуть строку «-1».

Если я использую print, результат печатается, как и ожидалось, однако, если я использую return, функция всегда возвращает «-1», даже если имя пользователя существует в файле.

Похоже, что он читает только первого пользователя, оценивает значения из файла .txt.

Кто-нибудь может объяснить, почему в данном случае «return» работает именно так?

userScores.txt:

Ann, 100
Benny, 102
Carol, 214
Darren, 129

Код:

  try:
        def getUserPoint(userName):
            f = open("userScores.txt", "r")
            file = f.readlines()
            print(file)
            for item in file:
                print(item)
                content = item.split(',')
                if content[0] == userName:
                    f.close()
                    return content[1]
                    #print(content[1])
                else:
                    f.close()
                    return "-1"
                    #print("-1")
    except IOError:
        print("File not found")
        f = open("userScores.txt", "w")
        f.close()
        print("-1")

Ответы [ 3 ]

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

Вы закрываете файл после первой итерации, вы должны удалить else, который находится внутри цикла, и извлечь его снаружи.На самом деле, я предлагаю вам реорганизовать код для использования with, это намного более чистый способ обработки закрывающихся файлов:

def getUserPoint(userName):
    try:
        with open("userScores.txt", "r") as file:
            for item in file:
                print(item)
                content = item.split(',')
                if content[0] == userName:
                    return content[1]
            return "-1"
    except IOError:
        print("File not found")
        return "-1"
0 голосов
/ 20 ноября 2018
import os

def getUserPoint(userName):
    f=open('userScores.txt')
    file=f.readlines()
    for item in file:

        content=item.split(',')

        if content[0]==userName:
            f.close()
            return content[1]
        else:
            continue

    f.close()   
    print('UserNotfound')
    return '-1'

x=getUserPoint('Benny')
print(x)
0 голосов
/ 20 ноября 2018

На первой итерации цикла, где имя в файле не совпадает с именем, которое вы передали функции, оно вернет и не продолжит цикл.

Например, если вы вызываете getUserPoint('Benny')

На первой итерации цикла он будет сравнивать "Ann" == "Benny"

Возвращает false, поэтому управление переходит к вашему предложению else и return из функции - нетбольше циклов.

...