#python
#python
Вопрос:
Пожалуйста, направьте меня; Я хочу напечатать процент по трем предметам. Программа, которую я создал, является:
subjects = ["Maths","English","Science"]
names = ["Talha","Fazeel","Usayd","Mujtuba","Sufyan","Aukasha","Moiz","Mohid","Wasil"]
scores = [[10,8,7],[8,8,6],[7,5,4],[4,0,2],[3,9,4],[7,8,3],[8,7,5],[9,5,7],[8,7,9]]
a=0
while a<len(names):
highest=scores[a][0]
subject=subjects[0]
i=0
while i<=2:
if scores[a][i]>highest:
highest=scores[a][i]
subject=subjects[i]
i=i 1
print(names[a] "'s Highest in",subject ":", highest)
a=a 1
Я не могу понять, как найти процент в этой программе. Пожалуйста, скажите мне, что добавить и куда добавить?
Мой ожидаемый результат:
Talha's Highest in Maths: 10 and percentage is: 83.4%
Fazeel's Highest in Maths: 8 and percentage is: 73.34%
Usayd's Highest in Maths: 7 and percentage is: 53.34%
Mujtuba's Highest in Maths: 4 and percentage is: 20%
Sufyan's Highest in English: 9 and percentage is: 53.34%
Aukasha's Highest in English: 8 and percentage is: 60%
Moiz's Highest in Maths: 8 and percentage is: 66.67%
Mohid's Highest in Maths: 9 and percentage is: 70%
Wasil's Highest in Science: 9 and percentage is: 80%
Комментарии:
1. Что представляет собой процент? Основываясь на ваших данных, Талха набрал 10 баллов по математике, так как же вы получаете 83,4%?
2. посмотрите на массивы, которые они представляют, всего 3 предметных отметки, процент от этих трех предметов.
3. Вычислите простое среднее значение на основе элементов в
scores[a]
. Это довольно просто — просто добавьте элементы и разделите на длину предметов, или 3 в данном случае.4. Я просто не могу понять, куда поместить это в коде?
5. Ниже приведен код, посмотрите один раз и дайте мне знать, если возникнут какие-либо проблемы
Ответ №1:
Существует множество способов улучшить свой код, используя функцию предварительной сборки или методы, предоставляемые python.
subjects = ["Maths", "English", "Science"]
names = ["Talha", "Fazeel", "Usayd", "Mujtuba", "Sufyan", "Aukasha", "Moiz", "Mohid", "Wasil"]
scores = [[10, 8, 7], [8, 8, 6], [7, 5, 4], [4, 0, 2], [3, 9, 4], [7, 8, 3], [8, 7, 5], [9, 5, 7], [8, 7, 9]]
a = 0
while a < len(names):
h_marks = (max(scores[a]))
subject = subjects[scores[a].index(h_marks)]
percentage = round(sum(scores[a])/30*100, 2)
print(f"{names[a]}'s Highest in {subject}: {h_marks} and percentage is: {percentage}%")
a = a 1
В этом коде
- max (список) вернет вам максимальное значение из списка.
- list.index(x) вернет индекс «x» в списке «list».
- round (x, y) округлит ваше число с плавающей запятой «x» на «y», состоящее из десятичных цифр.
- f»Значение x: {x}» называется форматированием строки, которое помещает значение x в строку при создании и инициализации строки.
Комментарии:
1. спасибо за ваш ответ, но я новичок и не могу понять ни одной вещи, которую вы сделали в своем коде.-_-
2. Хороший ответ! Было бы еще лучше, если бы вы добавили ссылки на документацию по каждому из пунктов для дальнейшего чтения в OP. Другая питонизация: используйте
zip
для перебораnames
иscores
вместоwhile
3. @Sara, пожалуйста, найдите несколько объяснений об изменениях и новых функциях или методах, используемых в этом коде, и как их можно применять в целом. и я полностью согласен с предложением, данным @PranavHosangadi, этот код определенно может быть оптимизирован и хорошо написан, но предполагая, что Сара довольно новичок в python, поэтому базовая модификация выполняется в коде, чтобы лучше понять код.
4. ок, нет проблем @MdZafarHassan. Я бы, конечно, постарался узнать о новых функциях раньше 🙂
Ответ №2:
Как нам, вам нужны общие оценки каждого ученика, чтобы вы могли суммировать на каждой итерации внутреннего цикла. Как только общее значение будет получено из 3 предметов.
После получения итога вы можете посчитать процент.
Вот обновленный код
subjects = ["Maths","English","Science"]
names = ["Talha","Fazeel","Usayd","Mujtuba","Sufyan","Aukasha","Moiz","Mohid","Wasil"]
scores = [[10,8,7],[8,8,6],[7,5,4],[4,0,2],[3,9,4],[7,8,3],[8,7,5],[9,5,7],[8,7,9]]
a=0
while a<len(names):
highest=scores[a][0]
subject=subjects[0]
i=0
total = 0
while i<=2:
total = scores[a][i]
if scores[a][i]>highest:
highest=scores[a][i]
subject=subjects[i]
i=i 1
percentage = str("{:.2f}".format(total/30*100))
print(names[a] "'s Highest in",str(subject) ":", str(highest) " and percetnage is ", percentage)
a=a 1
ВЫВОД:
Talha's Highest in Maths: 10 and percetnage is 83.33
Fazeel's Highest in Maths: 8 and percetnage is 73.33
Usayd's Highest in Maths: 7 and percetnage is 53.33
Mujtuba's Highest in Maths: 4 and percetnage is 20.00
Sufyan's Highest in English: 9 and percetnage is 53.33
Aukasha's Highest in English: 8 and percetnage is 60.00
Moiz's Highest in Maths: 8 and percetnage is 66.67
Mohid's Highest in Maths: 9 and percetnage is 70.00
Wasil's Highest in Science: 9 and percetnage is 80.00
...Program finished with exit code 0
Комментарии:
1. Хотя ответы только для кода могут отвечать на вопрос, вы могли бы значительно улучшить качество своего ответа, предоставив контекст для вашего кода, причину, по которой этот код работает, и некоторые ссылки на документацию для дальнейшего чтения. Это особенно применимо, когда OP является новичком и пытается понять, почему их код не работает.
2. На самом деле я новичок, и этот ответ помог мне, поэтому вам не следует посвящать его @PranavHosangadi
3. @VishalSheth не могли бы вы, пожалуйста, упростить его еще больше..
4. Каким образом, например, вы хотите оптимизировать код. Если это так, я могу предложить определить постоянную переменную и изменяемую переменную. Если вы не понимаете, пожалуйста, дайте мне знать. Спасибо
5. Я не могу понять эту строку: процент = str(«{:.2f}».format(всего/ 30 * 100))