3
\$\begingroup\$

This is written to find percentages of three subjects. Original HackerRank practice problem is here.

Input Format

The first line contains the integer N, the number of students. The next N lines contains the name and marks obtained by that student separated by a space. The final line contains the name of a particular student previously listed.

Output Format

Print one line: The average of the marks obtained by the particular student correct to 2 decimal places.

This code is working but I need better way of writing this code.

a = input()
a = int(a)
dict = {}
f = []
n = {}
for i in range(a):
        f = input().split()
        name = f[0]
        n['phy'] = float(f[1])
        n['che'] = float(f[2])
        n['math'] = float(f[3])
        f = []
        dict[name] = n
        n ={}
nam = input();
per = (dict[nam]['phy']+dict[nam]['che']+dict[nam]['math'])/3
print("%.2f"%per)
\$\endgroup\$
6
\$\begingroup\$

PEP 8, the official Python style guide, specifies four spaces per level of indentation. Since whitespace is significant in Python, that is a pretty strong convention.

The challenge states that the first line contains N, the number of students. So, don't call that value a in the code, and don't use the variable n to mean something else. It's confusing.

The variable i is never used. It is customary to use _ as the name of a "throwaway" variable whose value does not matter.

Clearing f and n at the end of the loop is cumbersome and unnecessary. Avoid cryptic variable names like f and n whose meanings are not obvious. Even names like nam and per are unnecessarily unfriendly. (Learn from Ken Thompson's biggest regret.)

For this problem, there is no need to store the scores for each subject separately. You can just store the average right away.

scores = {}
n = int(input())
for _ in range(n):
    line = input().split()
    name = line.pop(0)
    scores[name] = sum(float(score) for score in line) / len(line)
print("%.2f" % scores[input()])
\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.