[ad_1]
課題:
出力として「おめでとう # 優秀な成績を収めました!」を返すプログラムを作成してください。 (すべての科目の) 平均成績がクラス平均よりも高いすべての学生 (名前「#」を学生の名前に置き換えます)。
– 学生の名前、科目の名前、各科目の学生の成績、および各学生の平均を尋ねる必要があります。
– 学生は、平均でソートされたモニターに表示されなければなりません。 各生徒の名前と平均が表示されます。 バブルソート機能を使用する必要があります。
– 平均点が最も高い生徒の名前 (およびそれぞれの平均点) をモニターに表示する必要があります。
– 平均が最も低い生徒の名前 (およびそれぞれの平均) をモニターに表示する必要があります。
注: 科目の名前は、プログラムによって一度だけ尋ねられる必要があります。科目は各学生に関連付けられている必要があります。
——–
こんにちは、これは私の課題です。数日間、さまざまな方法で作成しようとしてきましたが、これが私の最も成功した試みです。 ご覧のとおり、このクラスには 3 人の生徒がいると書きましたが、実際には 30 人である必要があります (より速くするためにこれを行いました)。
私が作ったプログラムも非常に長く、教授が望んでいるものとはかなり異なっています。 append、関数、および lsits についての学習を終了しました。
誰かがそれがどのように行われたかを私に示すことができれば、私はそれを大いに感謝します!
(私の英語が下手でしたらすみません。)
私が試したこと:
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言語の使用-クラス平均よりも平均が高いすべての学生に出力「おめでとう」を与える方法[^]. クラスメートと一緒にいるべきかもしれません…
とても簡単ですが、宿題なのでコードは省略します。
考えてみてください。平均よりも高い成績を収めた各生徒を祝福する必要があります。 では、最初に知っておくべきことは何ですか?
明らかに、それはクラスの平均成績です – それがなければ、彼らがそれを上回っているかどうかを確認することはできません.
したがって、最初にそれを解決してから、各生徒を順番に処理し、それに対して成績を確認します.
開始するのに問題がある場合は、これが役立つ場合があります。 問題を解決するためのコードの書き方、初心者向けガイド[^]
[ad_2]
コメント