-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.py
171 lines (156 loc) · 5.37 KB
/
app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
from tabulate import tabulate
students = [];
totalMarks = 1200;
def getEnlgishMarks(n):
try:
englishMarks = int(input('Enter English Marks of '+n+': '))
except ValueError as e:
return getEnlgishMarks(n);
if englishMarks <= 0 or englishMarks >= 150:
print('Not a Valid Marks');
return getEnlgishMarks(n);
return englishMarks;
def getUrduMarks(n):
try:
urduMarks = int(input('Enter Urdu Marks of '+n+': '))
except ValueError as e:
return getUrduMarks(n);
if urduMarks <= 0 or urduMarks >= 150:
print('Not a Valid Marks');
return getUrduMarks(n);
return urduMarks;
def getMathMarks(n):
try:
mathMarks = int(input('Enter Math Marks of '+n+': '))
except ValueError as e:
return getMathMarks(n);
if mathMarks <= 0 or mathMarks >= 150:
print('Not a Valid Marks');
return getMathMarks(n);
return mathMarks;
def getIslamiatMarks(n):
try:
islamiatMarks = int(input('Enter Islamiat Marks of '+n+': '))
except ValueError as e:
return getIslamiatMarks(n);
if islamiatMarks <= 0 or islamiatMarks >= 150:
print('Not a Valid Marks');
return getIslamiatMarks(n);
return islamiatMarks;
def getPakStudiesMarks(n):
try:
psMarks = int(input('Enter Pak Studies Marks of '+n+': '))
except ValueError as e:
return getPakStudiesMarks(n);
if psMarks <= 0 or psMarks >= 150:
print('Not a Valid Marks');
return getPakStudiesMarks(n);
return psMarks;
def getScienceMarks(n):
try:
scienceMarks = int(input('Enter Science Marks of '+n+': '))
except ValueError as e:
return getScienceMarks(n);
if scienceMarks <= 0 or scienceMarks >= 150:
print('Not a Valid Marks');
return getScienceMarks(n);
return scienceMarks;
def getComputerMarks(n):
try:
computerMarks = int(input('Enter Computer Marks of '+n+': '))
except ValueError as e:
return getComputerMarks(n);
if computerMarks <= 0 or computerMarks >= 150:
print('Not a Valid Marks');
return getComputerMarks(n);
return computerMarks;
def getChemistryMarks(n):
try:
chemistryMarks = int(input('Enter Chemistry Marks of '+n+': '))
except ValueError as e:
return getChemistryMarks(n);
if chemistryMarks <= 0 or chemistryMarks >= 150:
print('Not a Valid Marks');
return getChemistryMarks(n);
return chemistryMarks;
def getNameOfStudent():
# take the name of the student
name = input('Enter The Name Of Student: ');
# validate if wrong input take
if not name.isalpha():
return getNameOfStudent();
return name;
# add more record if want
def addMoreRecord():
i = 0
while i < 2:
answer = input("Add more? (yes or no)")
if any(answer.lower() == f for f in ["yes", 'y', '1', 'ye']):
return main();
break
elif any(answer.lower() == f for f in ['no', 'n', '0']):
print("No")
break
else:
i += 1
if i < 2:
print('Please enter yes or no')
return addMoreRecord();
def gatherStudentData():
# take the name of the student
name = getNameOfStudent();
# taking subject marks for the student
englishMarks = getEnlgishMarks(name);
urduMarks = getUrduMarks(name);
mathMarks = getMathMarks(name);
scienceMarks = getScienceMarks(name);
islamiatMarks = getIslamiatMarks(name);
psMarks = getPakStudiesMarks(name);
computerMarks = getComputerMarks(name);
chemistryMarks = getChemistryMarks(name);
person = {
"name":name,
"english":englishMarks,
"urdu":urduMarks,
"math":mathMarks,
"islamiat":islamiatMarks,
"ps":psMarks,
"science":scienceMarks,
"computer":computerMarks,
"chemistry":chemistryMarks,
};
return person;
# Calculate grade of each student
def assignGradeLetter(score):
if score >= 70: return "A+"
elif score >= 60: return "A"
elif score >= 45: return "B"
elif score >= 30: return "C"
else : return "F"
# Calculate percentage of marks
def getMarksPercentage(marksList):
return (sum(marksList[0:]) / totalMarks) * 100
def main():
students.append(gatherStudentData());
addMoreRecord();
# run main data gathering
main();
# format data as per table
tableData = [];
for student in students:
data = [];
data.append(student['name']);
data.append(student['english']);
data.append(student['urdu']);
data.append(student['math']);
data.append(student['islamiat']);
data.append(student['ps']);
data.append(student['science']);
data.append(student['computer']);
data.append(student['chemistry']);
data.append(assignGradeLetter(getMarksPercentage(data[1:])));
data.append(sum(data[1:9]));
data.append(totalMarks);
tableData.append(data);
# print table of the students
print(tabulate(tableData, headers=['name', 'English', 'Urdu', 'Match', 'Islamiat', 'Pak Studies', 'Science', 'Computer', 'Chmistry', 'Grade', 'Ob Marks', 'Total']));