def avg(file_name):
age=0
hight=0
num=0
with open(file_name,'r') as f :
for line in f:
arr = line.strip().split()
age = age + int(arr[1])
hight = hight + int(arr[2])
num=num+1
age_avg=age/num
hight_avg=hight/num
print(age_avg)
print(hight_avg)
return (age_avg,hight_avg)
avg(program.txt)
在学习python写一个很简单的代码时遇到了一个小问题,就是这串代码中在我调用 avg()函数的时候,报错,报错内容为
Traceback (most recent call last):
File “E:/untitled/suibian.py”, line 17, in
avg(program.txt)
NameError: name ‘program’ is not defined
但是我总是找不到问题的原因,文件 program.txt 确定与工程文件在同一个目录下,但是未定义的原因我找不到是什么。
书本原代码为
def read_info(filename):
"""
从文件中读取学生信息
:param filename:
:return:
"""
lst = []
with open(filename, 'r') as f:
for line in f:
arrs = line.strip().split()
info = {
'name': arrs[0],
'age': int(arrs[1]),
'height': int(arrs[2])
}
lst.append(info)
return lst
def avg_age_avg_height(lst):
"""
解析lst,计算平均年龄和身高
:param lst:
:return:
"""
age_sum = 0
height_sum = 0
for stu in lst:
age_sum += stu['age']
height_sum += stu['height']
avg_age = age_sum/(len(lst))
avg_height = height_sum/(len(lst))
return avg_age, avg_height
def avg(filename):
"""
计算文件filename里学生的平均年龄和身高
:param filename:
:return:
"""
stu_lst = read_info(filename)
avg_age, avg_height = avg_age_avg_height(stu_lst)
print(avg_age, avg_height)
avg('program.txt')
到目前为止我仍然不知道问题出在哪里。先留个坑
今天发现原来是应该在 avg(program.txt)的文件名外加一个单引号,同时发现:
如果命名 path=‘E:\untitled\program.txt’ ,
调用 avg(path)的时候也会出现报错的情况。
报错内容为:
(unicode error) ‘unicodeescape’ codec can’t decode bytes in position 2-3: truncated \uXXXX escape
这是因为在字符串中,\ 被当作转义字符来使用,而代表符号’'应该在字符串中输入 ‘\’,这样就能正确调用函数