繁体   English   中英

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

[英]Return in python, reading values from .txt file

级别:初学者

嘿,我正在尝试解决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")

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

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

例如,如果您调用getUserPoint('Benny')

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

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

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM