返回python,从.txt文件中读取值

时间:2018-11-20 09:30:59

标签: python printing return

级别:初学者

嘿,我正在尝试用Python解决一个练习。

代码正在比较函数参数print(getUserPoint("Benny"))中给定的userName,如果该名称存在于userScores.txt中,则我想返回用户分数,否则我想返回字符串“ -1”。

如果我使用print,则会按预期打印结果,但是,如果我使用return,即使文件中存在userName,函数也会始终返回“ -1”。

看起来它只读取第一个用户,即.txt文件中的得分值。

在这种情况下,有人可以解释为什么“返回”以这种方式起作用吗?

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 :(得分:2)

在第一次迭代后关闭文件,应该消除循环内的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"

答案 1 :(得分:1)

在循环的第一次迭代中,文件中的名称与您传递给函数的名称不匹配时,它将返回并且不继续循环。

例如如果您致电getUserPoint('Benny')

在循环的第一次迭代中,它将比较"Ann" == "Benny"

这将返回false,因此控件将转到您的else子句和函数中的return-不再循环。

答案 2 :(得分:0)

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)
相关问题