Can someone have a look at my program? There's an error which I cannot identify and it's really confusing me. Also, please explain to me the problem so that I can understand how to use the function and program in another situation.
input_name = input("\nPlease enter students name » ").strip()
datafile = '1.txt'
while open(datafile, 'r') as f:
data = {}
for line in f:
name, value = line.split('=')
name = name.strip
value = str(value)
data.setdefault(name, []).append(value)
else:
break
avg = {}
for name, scores in data.items():
last_scores = scores[-3:]
avg[name] = sum(last_scores) / len(last_scores)
print("\n", input_name,"'s average score is", avg(input_name))
Read all data into a dict:
data = {}
for line in f:
name, value = line.split('=')
name = name.strip()
value = int(value)
data.setdefault(name, []).append(value)
The content of data:
{'Chris': [9, 9],
'John': [6, 4, 5],
'Sarah': [4, 7],
'Tanzil': [4, 4, 10, 5, 3],
'Tom': [2]}
Now you can calculate the average:
last_scores = data['Tanzil'][-3:]
avg = sum(last_scores) / len(last_scores)
>>> avg
6.0
or averages for all:
avg = {}
for name, scores in data.items():
last_scores = scores[-3:]
avg[name] = sum(last_scores) / len(last_scores)
now avg holds:
{'Chris': 9.0, 'John': 5.0, 'Sarah': 5.5, 'Tanzil': 6.0, 'Tom': 2.0}
Show all results:
for name, value in avg.items():
print(name, value)
prints:
Tanzil 6.0
Chris 9.0
Sarah 5.5
John 5.0
Tom 2.0
or nicely ordered highest to lowest average score:
from operator import itemgetter
for name, value in sorted(avg.items(), key=itemgetter(1), reverse=True):
print(name, value)
prints:
Chris 9.0
Tanzil 6.0
Sarah 5.5
John 5.0
Tom 2.0
input_name = input("\nPlease enter students name » ").strip()
datafile = '1.txt'
with open(datafile, 'r') as f:
data = {}
for line in f:
name, value = line.split('=')
name = name.strip()
value = int(value)
data.setdefault(name, []).append(value)
avg = {}
for name, scores in data.items():
last_scores = scores[-3:]
avg[name] = sum(last_scores) / len(last_scores)
print("\n", input_name,"'s average score is", avg[input_name])
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With