级别:初学者
嘿,我正在尝试用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")
答案 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)