属性错误:'generator'对象没有属性'isdigit'



我正在尝试浏览我创建的这个文件,只提取文件中人员的年龄。然后取年龄的平均值并打印出来。我正在尝试遍历文件中的行,它表明生成器对象没有属性。我使用的是python 3,我已经注释掉了以前使用的一些代码,所以我不必担心。我也不知道是否应该使用注释后的代码,但我只是害怕失去迄今为止得到的所有想法。如果我不能迭代,我如何在循环中获得这些年龄?

f = open('myfile.txt','w')
f.write('Name, Age, Gender, Professionn')
f.write('Harry, 23, Male, Software Engineern')
f.write('Sam, 25, Male, Lawyern')
f.write('Lisa, 29, Female, Computer Scientistn')
f.write('Mary, 22, Female, Doctorn')
f.close()
# print(readFile.read())
# readFile = open("myfile.txt")
with open('myfile.txt', 'r') as file:

for line in file:
values = (line.split(', ') for line in file)
if values.isdigit[1] == True:
numbers = 0
numbers += values
average = numbers % 4
print(average)

尝试:

f = open('myfile.txt','w')
f.write('Name, Age, Gender, Professionn')
f.write('Harry, 23, Male, Software Engineern')
f.write('Sam, 25, Male, Lawyern')
f.write('Lisa, 29, Female, Computer Scientistn')
f.write('Mary, 22, Female, Doctorn')
f.close()
with open('myfile.txt', 'r') as file:
numbers = 0
for line in file:
values = line.split(', ')
if values[1].isdigit() == True:
numbers += int(values[1])
average = numbers / 4
print(average) # 24.75

有几点可以改进:

  1. values = (line.split(', ') for line in file)values指定了一个生成器(注意看似无辜的括号(,而生成器没有isdigit。您已经在使用for循环,所以不需要生成器(实际上不应该(。

  2. 在更正后的代码中,values现在是一个字符串列表。因此,您需要使用values[1]来访问列表中的一个项目,然后应用isdigit

  3. 您正在每次迭代中重置numbers。在循环之前启动变量

  4. values[1]是一个字符串,所以为了将其添加到numbers中,您需要int

  5. %是模算子。使用/进行(实际(分割。

  6. 使用硬编码的数字(在这种情况下,用特定的数字4除以某个数字(不是最好的选择。您可能需要另一种获取记录数的方法。

最新更新