Tavs šīs stundas izaicinājums: Pārvērst vienkāršu sarakstu par "viedo karti". Kad mēs ielādējam datus no CSV, tie bieži ir "netīri" (ar liekām atstarpēm vai tikai teksta formātā). Tu iemācīsies notīrīt datus un transformēt tos, izveidojot vārdnīcu, kurā lokācijas ID nodrošina acumirklīgu piekļuvi visai istabas informācijai.
SR 2.4.14. (Datu apstrāde un validācija)Kad mēs nolasām CSV ar csv.DictReader, mēs iegūstam rindu sarakstu. Lai tajā atrastu 50. lokāciju, datoram ir jāpārskata 49 iepriekšējās. Transformējot datus lielā vārdnīcā, mēs iegūstam tūlītēju piekļuvi pēc atslēgas (ID).
| Metode / Funkcija | Ko tā dara? | Kāpēc tas ir svarīgi CSV apstrādē? |
|---|---|---|
.strip() |
Noņem tukšās atstarpes no teksta sākuma un beigām. | Izlabo Excel eksporta kļūdas (piem., " 1 " kļūst par "1"). |
int(teksts) |
Pārvērš tekstu par veselu skaitli. | CSV visi dati ir teksts (str). Mums ID vajag kā skaitļus. |
if atslēga in dict: |
Pārbauda, vai konkrētā atslēga eksistē vārdnīcā. | Novērš programmas avarēšanu, ja spēlētājs izvēlas neesošu vietu. |
tests.py.pasaules_karte = {}.id_numurs = int(rinda['id'].strip()).pasaules_karte[id_numurs] = rinda.with open() bloka pārbaudi rezultātu: print(pasaules_karte[1]) – tam būtu jāizvada visa informācija par 1. lokāciju.Spēles failos mēdz būt "tukšumi" (piemēram, beigu lokācijām nav nākamā mērķa). Mums tie jāapstrādā droši.
merkis_a un merkis_b kolonnām:
rinda['merkis_a'] nav tukšs (!= ""), tad pārvērt to par int(), citādi atstāj kā None".Izveidosim algoritmu, kas automātiski pārbauda, vai Tavā stāstā nav "mirušo saišu" (norādes uz neeksistējošām vietām).
for ciklu, kas pārlūko Tavu jaunizveidoto pasaules_karte vārdnīcu (izmanto .values()).if rinda['merkis_a'] and rinda['merkis_a'] not in pasaules_karte:).f"Kļūda lokācijā {rinda['id']}: mērķis {rinda['merkis_a']} nav atrasts!".1. Reģistrjutība: Python atšķir'id'no'ID'. Pārliecinies, ka koda atslēgas precīzi sakrīt ar CSV galvenēm!
2. ValueError konvertējot tukšumu: Tu nevari izdarītint(""). Vienmēr pārbaudi (if rinda['merkis'] != "":), pirms mēģini tekstu pārvērst par skaitli.
3. Lokālo mainīgo pazušana: Japasaules_karte = {}definēsi iekšpusēwith open()blokam vai ciklā, tai būs grūti piekļūt no ārpuses vai tā pārrakstīsies katru reizi no jauna.
import csv
pasaules_karte = {}
with open('pasaule.csv', mode='r', encoding='utf-8') as f:
lasitajs = csv.DictReader(f)
for rinda in lasitajs:
# Notīrām un konvertējam galveno ID
id_skaitlis = int(rinda['id'].strip())
# Pievienojam rindu vārdnīcai
pasaules_karte[id_skaitlis] = rinda
# Tagad piekļuve jebkurai istabai ir acumirklīga:
# Izprintēsim 2. lokācijas nosaukumu un tekstu
istaba = pasaules_karte[2]
print(f"Tu atrodies: {istaba['nosaukums']}")
print(istaba['teksts'])