Acest capitol este despre dicționare. Dicționarele au chei și valori. Cheile sunt folosite pentru a găsi valorile. Iată un exemplu de dicționar utilizat:
def print_menu():
print('1. Print Phone Numbers')
print('2. Add a Phone Number')
print('3. Remove a Phone Number')
print('4. Lookup a Phone Number')
print('5. Quit')
print()
numbers = {}
menu_choice = 0
print_menu()
while menu_choice != 5:
menu_choice = int(input("Type in a number (1-5): "))
if menu_choice == 1:
print("Telephone Numbers:")
for x in numbers.keys():
print("Name: ", x, "\tNumber:", numbers[x])
print()
elif menu_choice == 2:
print("Add Name and Number")
name = input("Name: ")
phone = input("Number: ")
numbers[name] = phone
elif menu_choice == 3:
print("Remove Name and Number")
name = input("Name: ")
if name in numbers:
del numbers[name]
else:
print(name, "was not found")
elif menu_choice == 4:
print("Lookup Number")
name = input("Name: ")
if name in numbers:
print("The number is", numbers[name])
else:
print(name, "was not found")
elif menu_choice != 5:
print_menu()
Și iată ieșirea mea:
1. Print Phone Numbers 2. Add a Phone Number 3. Remove a Phone Number 4. Lookup a Phone Number 5. Quit Type in a number (1-5): 2 Add Name and Number Name: Joe Number: 545-4464 Type in a number (1-5): 2 Add Name and Number Name: Jill Number: 979-4654 Type in a number (1-5): 2 Add Name and Number Name: Fred Number: 132-9874 Type in a number (1-5): 1 Telephone Numbers: Name: Jill Number: 979-4654 Name: Joe Number: 545-4464 Name: Fred Number: 132-9874 Type in a number (1-5): 4 Lookup Number Name: Joe The number is 545-4464 Type in a number (1-5): 3 Remove Name and Number Name: Fred Type in a number (1-5): 1 Telephone Numbers: Name: Jill Number: 979-4654 Name: Joe Number: 545-4464 Type in a number (1-5): 5
Acest program este similar cu lista de nume de mai devreme în capitolul despre liste. Iată cum funcționează programul. Mai întâi este definită funcția print_menu. print_menu
doar tipărește un meniu care este folosit ulterior de două ori în program. Urmează liniile amuzante numbers = {}
. Tot ceea ce face această linie este să îi spună lui Python că numbers
este un dicționar. Următoarele linii doar fac meniul să funcționeze. Liniile
for x in numbers.keys():
print("Name:", x, "\tNumber:", numbers[x])
parcurg dicționarul și tipăresc toate informațiile. Funcția
returnează o listă care este apoi folosită de bucla
numbers.keys()
. Lista returnată de
forkeys()
nu este într-o anumită ordine, așa că dacă o doriți în ordine alfabetică, trebuie sortată. Similar listelor, declarația numbers[x]
este folosită pentru a accesa un anumit membru al dicționarului. Desigur, în acest caz x
este un șir. În continuare, linia numbers[name] = phone
adaugă un nume și un număr de telefon în dicționar. Dacă name
ar fi fost deja în dicționar, phone
ar înlocui orice era acolo înainte. În continuare liniile
if name in numbers:
del numbers[name]
văd dacă un nume este în dicționar și îl șterge dacă este. Operatorul
returnează adevărat dacă
name in numbersname
este în
, dar în caz contrar returnează fals. Linia
numbersdel
elimină numele cheii și valoarea asociată acelei chei. Liniile
numbers[name]
if name in numbers:
print("The number is", numbers[name])
verifică dacă dicționarul are o anumită cheie și dacă imprimă numărul asociat acesteia. În cele din urmă, dacă alegerea meniului este invalidă, meniul este retipărit pentru plăcerea dvs. de vizionare.
O recapitulare: Dicționarele au chei și valori. Cheile pot fi șiruri sau numere. Cheile indică valori. Valorile pot fi orice tip de variabilă (inclusiv liste sau chiar dicționare (acele dicționare sau liste, desigur, pot conține dicționare sau liste ele însele (înfricoșător, nu? 🙂 ))). Iată un exemplu de utilizare a unei liste într-un dicționar:
max_points = [25, 25, 50, 25, 100]
assignments = ['hw ch 1', 'hw ch 2', 'quiz ', 'hw ch 3', 'test']
students = {'#Max': max_points}
def print_menu():
print("1. Add student")
print("2. Remove student")
print("3. Print grades")
print("4. Record grade")
print("5. Print Menu")
print("6. Exit")
def print_all_grades():
print('\t', end=' ')
for i in range(len(assignments)):
print(assignments[i], '\t', end=' ')
print()
keys = list(students.keys())
keys.sort()
for x in keys:
print(x, '\t', end=' ')
grades = students[x]
print_grades(grades)
def print_grades(grades):
for i in range(len(grades)):
print(grades[i], '\t', end=' ')
print()
print_menu()
menu_choice = 0
while menu_choice != 6:
print()
menu_choice = int(input("Menu Choice (1-6): "))
if menu_choice == 1:
name = input("Student to add: ")
students[name] = [0] * len(max_points)
elif menu_choice == 2:
name = input("Student to remove: ")
if name in students:
del students[name]
else:
print("Student:", name, "not found")
elif menu_choice == 3:
print_all_grades()
elif menu_choice == 4:
print("Record Grade")
name = input("Student: ")
if name in students:
grades = students[name]
print("Type in the number of the grade to record")
print("Type a 0 (zero) to exit")
for i in range(len(assignments)):
print(i + 1, assignments[i], '\t', end=' ')
print()
print_grades(grades)
which = 1234
while which != -1:
which = int(input("Change which Grade: "))
which -= 1 #same as which = which - 1
if 0 <= which < len(grades):
grade = int(input("Grade: "))
grades[which] = grade
elif which != -1:
print("Invalid Grade Number")
else:
print("Student not found")
elif menu_choice != 6:
print_menu()
și iată un exemplu de ieșire:
1. Add student 2. Remove student 3. Print grades 4. Record grade 5. Print Menu 6. Exit Menu Choice (1-6): 3 hw ch 1 hw ch 2 quiz hw ch 3 test #Max 25 25 50 25 100 Menu Choice (1-6): 5 1. Add student 2. Remove student 3. Print grades 4. Record grade 5. Print Menu 6. Exit Menu Choice (1-6): 1 Student to add: Bill Menu Choice (1-6): 4 Record Grade Student: Bill Type in the number of the grade to record Type a 0 (zero) to exit 1 hw ch 1 2 hw ch 2 3 quiz 4 hw ch 3 5 test 0 0 0 0 0 Change which Grade: 1 Grade: 25 Change which Grade: 2 Grade: 24 Change which Grade: 3 Grade: 45 Change which Grade: 4 Grade: 23 Change which Grade: 5 Grade: 95 Change which Grade: 0 Menu Choice (1-6): 3 hw ch 1 hw ch 2 quiz hw ch 3 test #Max 25 25 50 25 100 Bill 25 24 45 23 95 Menu Choice (1-6): 6
Iată cum funcționează programul. Practic, variabila students
este un dicționar cu cheile fiind numele elevilor și valorile fiind notele lor. Primele două linii doar creează două liste. Următoarea linie students =
creează un nou dicționar cu key {
{'#Max': max_points}#Max
} și valoarea este setată să fie [25, 25, 50, 25, 100]
(deoarece asta era max_points
când se face atribuirea) (folosesc tasta #Max
deoarece #
este sortat înaintea oricăror caractere alfabetice). În continuare este definit print_menu
. În continuare, funcția
este definită în liniile:
print_all_grades
def print_all_grades():
print('\t',end=" ")
for i in range(len(assignments)):
print(assignments[i], '\t',end=" ")
print()
keys = list(students.keys())
keys.sort()
for x in keys:
print(x, '\t',end=' ')
grades = students[x]
print_grades(grades)
Observați cum sunt scoase mai întâi cheile din dicționarul students
cu funcția keys
din linia keys = list(students.keys())
. keys
este un iterabil și este convertit în listă, astfel încât toate funcțiile pentru liste să poată fi utilizate pe ea. Apoi cheile sunt sortate în linia keys.sort()
. for
este folosit pentru a trece prin toate cheile. Notele sunt stocate ca o listă în dicționar, astfel încât grades = students[x]
oferă grades
lista care este stocată la tasta x
. Funcția print_grades
doar tipărește o listă și este definită câteva rânduri mai târziu.
Liniile ulterioare ale programului implementează diferitele opțiuni ale meniului. Linia students[name] = [0] * len(max_points
adaugă un student la cheia numelui lor. Notația [0] * len(max_points)
creează doar o listă de 0-uri care are aceeași lungime ca lista max_points
.
Intrarea de îndepărtare a studentului șterge doar un student similar cu exemplul de agendă telefonică. Alegerea înregistrării notelor este puțin mai complexă. Notele sunt preluate în linia grades = students[name]
primește o referință la notele numelui studentului,name
. O notă este apoi înregistrată în rândul grades[which] = grade
. Este posibil să observați că grades
nu sunt niciodată reintroduse în dicționarul studenților (ca în no students[name] = grades
). Motivul pentru afirmația lipsă este că grades
sunt de fapt un alt nume pentru students[name]
și, prin urmare, schimbarea grades
schimbă student[name]
.
Dicționarele oferă o modalitate ușoară de a lega cheile la valori. Aceasta poate fi folosită pentru a urmări cu ușurință datele care sunt atașate la diferite chei.
(Include texte din Wikibooks traduse și adaptate de Nicolae Sfetcu)
Lasă un răspuns