我有一个家庭作业,我们需要浏览一个我们创建的文件,并选择玩过超过50场比赛并且平均投篮命中率超过50%的球员(我们必须通过除以这两个数字来计算) )。
我已经像这样格式化了我的代码,因为我试图索引我从文本创建的新行。这对我不起作用,我想知道是否有人能指出我的新方向。谢谢。
f = open("stats-clean.txt", "r")
lines = f.read()
for line in lines:
new_lines = lines.split("\n")
report = []
new_lines.remove(new_lines[0])
for item in new_lines:
if int(item[4])/int(item[5]) > .50 and int(item[3]) >= 50:
report.append(item)
print(report)
f.close()
答案 0 :(得分:1)
我不确定输入的格式,但有一个问题是你试图将整数与浮点数进行比较。如果您将项目[4]和项目[5]分类为内注,例如
int(item[4])/int(item[5]) > .50
那么上面分区的解析总会给你一个int。所以......
int(4)/int(5) = 0
但是,
float(4)/float(5) = 0.8
因此,您可能没有真正进行所需的比较,这可能导致if语句的该部分解析为false。
答案 1 :(得分:1)
只是为了让您知道,有一种更简单的方法可以做到这一点,我只是编写了这个解决方案以获得乐趣。
var myVar_1 = "things";
var myVar_2 = "things";
var myVar_3 = "things";
var myVar_4 = "things";
var myVar_5 = "things";
答案 2 :(得分:0)
这里的一个关键问题是new_lines
是一个字符串列表,例如
>>> new_lines[0]
'Julyan Stone,PG,DEN,4,0.5,0.5'
此字符串的 item[4]
是字符'a'
,因此当您使用int
进行投射时,您会获得ValueError: invalid literal for int() with base 10: 'a'
。
您需要使用split(',')
拆分new_lines的每个元素。例如,
>>> new_lines[1].split(',')
['Chris Wilcox', 'PF', 'BOS', '61', '1.8', '2.5']
现在您可以item[4]
'1.8'
进行投射并执行条件测试,但使用floats
代替int
将字符串转换为数字,如下所示: @ GC123UNC
还要注意循环
for line in lines:
new_lines = lines.split("\n")
是多余的:lines
是一个字符串:一个split('\n')
为您提供所需的列表new_lines
。您需要遍历new_lines
的元素并在,
上拆分,以便您可以进行条件测试。
而不是remove
使用切片:newlines[1:]
。
您可能希望考虑使用lines = f.readlines()
而不是lines = f.read()
。后者返回一个您需要拆分然后再拆分的字符串。前者为您提供了一个列表,您可以strip()
并将其拆分为,
(类似line.strip().split(',')
)