Entscheide dich für einen Laborauftrag mit Python (Fiktion)

Lassen Sie uns die Situation organisieren

Laborname

#Laborname
labs = list("ABCDEFG")
labs
['A', 'B', 'C', 'D', 'E', 'F', 'G']

Mindestanzahl von Aufgaben für jedes Labor

#Mindestanzahl von Aufgaben für jedes Labor
min_assign = [2 for x in range(len(labs))]
min_assign
[2, 2, 2, 2, 2, 2, 2]

Maximale Anzahl von Aufgaben für jedes Labor

#Maximale Anzahl von Aufgaben für jedes Labor
max_assign = [4 for x in range(len(labs))]
max_assign
[4, 4, 4, 4, 4, 4, 4]

Studenten ID

#Studenten ID
n_students = 20
students = [x + 1 for x in range(n_students)]
students
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]

Rangliste der Schüler

#Rangliste der Schüler
import random
grades = [x + 1 for x in range(n_students)]
random.shuffle(grades)
grades
[9, 4, 13, 14, 7, 17, 5, 2, 10, 1, 19, 16, 18, 20, 3, 15, 12, 6, 8, 11]

Laborauftragsumfrage

#Laborauftragsumfrage
questionnaire = []
for x in range(n_students):
    hope = [x + 1 for x in range(len(labs))]
    random.shuffle(hope)
    if x > 0 and random.random() < 0.1: #Machen Sie Leute, die die gleiche gewünschte Reihenfolge haben
        hope = questionnaire[x - 1]
    questionnaire.append(hope)
questionnaire
[[2, 7, 3, 5, 4, 6, 1],
 [2, 6, 1, 7, 3, 4, 5],
 [4, 7, 6, 5, 2, 1, 3],
 [6, 3, 2, 4, 1, 7, 5],
 [2, 5, 4, 3, 7, 1, 6],
 [3, 7, 2, 6, 5, 1, 4],
 [1, 7, 3, 2, 6, 5, 4],
 [4, 1, 7, 3, 6, 2, 5],
 [7, 6, 4, 3, 1, 2, 5],
 [5, 3, 4, 7, 1, 6, 2],
 [3, 2, 7, 4, 6, 1, 5],
 [6, 7, 5, 4, 1, 2, 3],
 [6, 7, 5, 4, 1, 2, 3],
 [2, 3, 7, 5, 1, 4, 6],
 [7, 3, 5, 1, 6, 4, 2],
 [6, 5, 7, 4, 3, 2, 1],
 [2, 3, 1, 5, 6, 4, 7],
 [4, 2, 1, 6, 7, 5, 3],
 [6, 2, 7, 4, 1, 3, 5],
 [2, 5, 4, 6, 1, 3, 7]]

Zufällig zuweisen

#Zufällig zuweisen
assignment = [[] for x in range(len(labs))]
rand_stu = [x for x in range(n_students)]
random.shuffle(rand_stu)
lab = 0
for stu in rand_stu:
    assignment[lab % len(labs)].append(stu)
    lab += 1
assignment
[[8, 13, 6],
 [1, 5, 17],
 [18, 16, 3],
 [9, 2, 11],
 [12, 10, 14],
 [0, 4, 15],
 [19, 7]]

Wer will was als Ergebnis der Zuordnung

def resulted(assignment, questionnaire):
    return [[questionnaire[stu][i] for j, stu in enumerate(lab)] for i, lab in enumerate(assignment)]
resulted(assignment, questionnaire)
[[7, 2, 1], [6, 7, 2], [7, 1, 2], [7, 5, 4], [1, 6, 6], [6, 1, 2], [7, 5]]

Die Größe der Unzufriedenheit insgesamt

def fuman(assignment, questionnaire):
    ary = resulted(assignment, questionnaire)
    return sum([sum(x) - len(x) for x in ary])
fuman(assignment, questionnaire)
65

Priorisieren Sie diejenigen mit guten Noten (berücksichtigen Sie nicht die Mindestanzahl von Aufgaben)

#Eine Methode zur Entscheidung des gewünschten Labors, wobei denjenigen mit guten Noten Vorrang eingeräumt wird (ohne Berücksichtigung der Mindestanzahl von Aufgaben).
assignment = [[] for x in range(len(labs))]
for i in range(len(students)):
    stu = grades.index(i + 1) #Schüler mit der Klasse i
    que = questionnaire[stu] #Notenrang i. Wunsch des Schülers
    for j in range(len(labs)):
        lab = que.index(j + 1) #Labor der Hoffnungsordnung j
        if len(assignment[lab]) < max_assign[lab]:
            assignment[lab].append(stu)
            break
assignment
[[6, 13],
 [7, 10],
 [1, 17, 16, 3],
 [14],
 [9, 18, 8, 19],
 [4, 2, 11, 5],
 [0, 15, 12]]

Wer will was als Ergebnis der Zuordnung

resulted(assignment, questionnaire)
[[1, 2], [1, 2], [1, 1, 1, 2], [1], [1, 1, 1, 1], [1, 1, 2, 1], [1, 1, 3]]

Die Größe der Unzufriedenheit insgesamt

fuman(assignment, questionnaire)
6

Vorrang haben diejenigen mit guten Noten (beachten Sie die Mindestanzahl von Aufgaben)

Geben Sie zuerst die Mindestanzahl von Aufgaben ein

#So priorisieren Sie das gewünschte Labor gegenüber denjenigen mit guten Noten (geben Sie zuerst die Mindestanzahl von Aufgaben ein)
assignment = [[] for x in range(len(labs))]
assigned_students = []
for i in range(len(students)):
    stu = grades.index(i + 1) #Schüler mit der Klasse i
    que = questionnaire[stu] #Notenrang i. Wunsch des Schülers
    for j in range(len(labs)):
        lab = que.index(j + 1) #Labor der Hoffnungsordnung j
        if len(assignment[lab]) < min_assign[lab]:
            assignment[lab].append(stu)
            assigned_students.append(stu)
            break
assignment
[[6, 19], [7, 16], [1, 17], [14, 3], [9, 18], [4, 8], [0, 2]]
assigned_students
[9, 7, 14, 1, 6, 17, 4, 18, 0, 8, 19, 16, 2, 3]

Weisen Sie nicht zugewiesene Schüler zu

#So priorisieren Sie das gewünschte Labor gegenüber denjenigen mit guten Noten (weisen Sie nicht zugewiesene Schüler zu)
for i in range(len(students)):
    stu = grades.index(i + 1) #Schüler mit der Klasse i
    que = questionnaire[stu] #Notenrang i. Wunsch des Schülers
    if stu in assigned_students:
        continue
    for j in range(len(labs)):
        lab = que.index(j + 1) #Labor der Hoffnungsordnung j
        if len(assignment[lab]) < max_assign[lab]:
            assignment[lab].append(stu)
            assigned_students.append(stu)
            break
assignment
[[6, 19, 13],
 [7, 16],
 [1, 17],
 [14, 3],
 [9, 18, 11, 12],
 [4, 8, 5, 10],
 [0, 2, 15]]

Wer will was als Ergebnis der Zuordnung

resulted(assignment, questionnaire)
[[1, 2, 2], [1, 3], [1, 1], [1, 4], [1, 1, 1, 1], [1, 2, 1, 1], [1, 3, 1]]

Die Größe der Unzufriedenheit insgesamt

fuman(assignment, questionnaire)
10

In der Tat

Es ist schwierig, weil es verschiedene Labors gibt, in denen sich die Popularität konzentriert, und Labors, die überhaupt nicht beliebt sind (´ ・ ω ・ `)

Recommended Posts

Entscheide dich für einen Laborauftrag mit Python (Fiktion)
Lesen einer CSV-Datei mit Python 2/3
Senden Sie eine Nachricht mit Python an LINE (LINE Notify)
Versuchen Sie, mit Python eine Lebenskurve zu zeichnen
Ich möchte ein Spiel mit Python machen
Versuchen Sie, in Python einen "Entschlüsselungs" -Code zu erstellen
Schritte zum Erstellen eines Twitter-Bots mit Python
Versuchen Sie, mit Python eine Diedergruppe zu bilden
Ich möchte mit Python in eine Datei schreiben
Zubu Amateur will Python starten
So konvertieren / wiederherstellen Sie einen String mit [] in Python
Memo mit Python mit HiveServer2 von EMR verbunden
[Python] Wie zeichnet man mit Matplotlib ein Liniendiagramm?
Lassen Sie uns ein Befehls-Standby-Tool mit Python erstellen
Ich möchte mit einem Roboter in Python arbeiten.
Vom Kauf eines Computers bis zur Ausführung eines Programms auf Python
[Python] Ein Memo zum vertikalen Schreiben von CSV mit Pandas
[Python] So erstellen Sie mit Matplotlib ein zweidimensionales Histogramm
Ich möchte einen Quantencomputer mit Python betreiben
[Python] Wie zeichnet man mit Matplotlib ein Streudiagramm?
[Python] Weg zur Schlange (5) Spiele mit Matplotlib
Stellen Sie mit Python eine Verbindung zu BigQuery her
Ein Weg zum mittleren Python
Stellen Sie mit Python eine Verbindung zu Wikipedia her
Post to Slack mit Python 3
Machen Sie eine Lotterie mit Python
Schalten Sie Python mit Alternativen auf 2.7 um
Schreiben Sie mit Python in csv
Erstellen Sie ein Verzeichnis mit Python
So konvertieren Sie mit Python [Anwendung] von einem Array in ein Wörterbuch
Ich habe ein Paket erstellt, um Zeitreihen mit Python zu filtern
Ich habe schnell ein Programm geschrieben, um DI mit Python zu lernen
Wahrscheinlich der einfachste Weg, um mit Python 3 ein PDF zu erstellen
Experimentieren Sie mit Python, um ein PDF für Selbstversorger für Kindle zu erstellen
[Python] Hinweise beim Versuch, Numpy mit Cython zu verwenden
Senden Sie eine Nachricht an Google Hangouts Chat mit einem Thread (Python)
Erstellen einer Entwicklungsumgebung für die Python2.7-Serie mit Vagrant
Erstellen Sie eine Nachricht, die der Lokalisierung entspricht, mit einer Python-Übersetzungszeichenfolge
[Python] Was ist eine with-Anweisung?
Löse ABC163 A ~ C mit Python
Python: So verwenden Sie Async mit
Bedienen Sie den Belegdrucker mit Python
Python-Grafikhandbuch mit Matplotlib.
Link, um mit Python zu beginnen
[Python] Mit Python in eine CSV-Datei schreiben
Lassen Sie uns eine GUI mit Python erstellen.
Versuchen Sie, Facebook mit Python zu betreiben
Löse ABC166 A ~ D mit Python
Ausgabe in eine CSV-Datei mit Python
Erstellen Sie eine virtuelle Umgebung mit Python!
Ich habe mit Python eine Lotterie gemacht.
Konvertieren Sie die Liste mit Python in DataFrame
MP3 → WAV-Konvertierung mit Python
Schwanzrekursion mit Python2 durchführen
Erstellen einer virtuellen Umgebung mit Python 3