【解決方法】Python – 出力を返すプログラムの作り方 "おめでとう" クラス平均よりも高い平均値を持つすべての生徒に?


課題:
出力として「おめでとう # 優秀な成績を収めました!」を返すプログラムを作成してください。 (すべての科目の) 平均成績がクラス平均よりも高いすべての学生 (名前「#」を学生の名前に置き換えます)。

– 学生の名前、科目の名前、各科目の学生の成績、および各学生の平均を尋ねる必要があります。

– 学生は、平均でソートされたモニターに表示されなければなりません。 各生徒の名前と平均が表示されます。 バブルソート機能を使用する必要があります。

– 平均点が最も高い生徒の名前 (およびそれぞれの平均点) をモニターに表示する必要があります。

– 平均が最も低い生徒の名前 (およびそれぞれの平均) をモニターに表示する必要があります。

注: 科目の名前は、プログラムによって一度だけ尋ねられる必要があります。科目は各学生に関連付けられている必要があります。

——–

こんにちは、これは私の課題です。数日間、さまざまな方法で作成しようとしてきましたが、これが私の最も成功した試みです。 ご覧のとおり、このクラスには 3 人の生徒がいると書きましたが、実際には 30 人である必要があります (より速くするためにこれを行いました)。
私が作ったプログラムも非常に長く、教授が望んでいるものとはかなり異なっています。 append、関数、および lsits についての学習を終了しました。
誰かがそれがどのように行われたかを私に示すことができれば、私はそれを大いに感謝します!
(私の英語が下手でしたらすみません。)

私が試したこと:

Python
num_students = 3
num_subjects = 5

sum_class = 0
sum_student = 0

averages_students = [[]]
names = []
subjects = []

average_class = 0
name_disc_grades = [[]]

i = 0
j = 0
grade = 0

#obtain names of subjects
while i < num_subjects:
name_subject = input("Name of the subject: ")
if name_subject:
subjects.append(name_subject)
i = i + 1
name_subject = None

print("List of subjects: ")
print(subjects)

i = 0
#obtain names of students
while i < num_students:
name_student = input("Name of the student: ")

if name_student:
name_student = input("Name of the student: ")
if name_student
subjects.append(name_student)
i = i + 1
name_student = None

#clean variables, list and matrix
i = 0
j = 0
name_disc_grades.clear()
averages_students.clear()

#obtain grades of student per subject
for i in range(num_students):
while j < num_subjects:
#we know that we are going to iterate over 1 student and all subjects.
grade = eval(input("indicate the grade of student " + names[i] + " the subject " + subjects[j] + ": "))

names_disc_grades.append([str(names[i]), str(subjects[j]), float(grade)])
if grade:
sum_class = sum_class + int(grade)
sum_student = sum_student+ int(grade)
j = j + 1

print("----------------------------------------------------------------------")
averages_students.append([str(names[i]), float(sum_student / num_subjects)])
sum_student = 0
j = 0
i = i + 1

average_class = float(sum_class/num_subjects/num_students)
print("")
print("average of class is: ", average_class)
print("")
print("all averages of students: ")
print(averages_students)

#modificate the comparison to see average value and not the set [name,average]
def bubbleSort(theSeq):
n = len(theSeq)

for i in range(n - 1):
flag = 0
for j in range(n-1):

if theSeq[j][1] > theSeq[j + 1]
[1]:
tmp = theSeq[j]
theSeq[j] = theSeq[j + 1]
theSeq[j + 1] = tmp
flag = 1

if flag == 0:
breakpoint()
return theSeq

# sort list by grade [name,grade]
average_students = bubbleSort(averages_students)
print("")
print('averages sorted: ')
print(average_students)

# averages_students[-1] when using this negative number, it'll always fetch the last register on the list, we know that # is the biggest because the list is descending, it should always give the best average.
# the student with the biggest average
print("")
print("the student with the biggest/better average and:", averages_students[-1][0])
print(congratualations for the excelent performance!")
print("with the average of: ", averages_students[-1][-1])

# here the same, and always the first score of the list [name, average]
# the student with smallest average
print("")
print("students with average superior to the average of the class are: ")
i=0
#compare
for i in range(num_students):
if average_students[i][1] > average_class:
print('Congratulations'. names[i], "for your average of", average_students[i][1], "!")
print("----------------")

#extra - show all grades by student by subject.
print("")
print("All of the grades of each student by subject: ", names_disc_grades)

解決策 1

1週間かそこら前にこの質問を見たことがあると思います… Python言語の使用-クラス平均よりも平均が高いすべての学生に出力「おめでとう」を与える方法[^]. クラスメートと一緒にいるべきかもしれません…

とても簡単ですが、宿題なのでコードは省略します。

考えてみてください。平均よりも高い成績を収めた各生徒を祝福する必要があります。 では、最初に知っておくべきことは何ですか?

明らかに、それはクラスの平均成績です – それがなければ、彼らがそれを上回っているかどうかを確認することはできません.
したがって、最初にそれを解決してから、各生徒を順番に処理し、それに対して成績を確認します.

開始するのに問題がある場合は、これが役立つ場合があります。 問題を解決するためのコードの書き方、初心者向けガイド[^]

コメント

タイトルとURLをコピーしました