Saraksts, kurā ir citi saraksti
Divdimensiju saraksts ir saraksts, kura elementi paši ir saraksti. To var izmantot, lai glabātu datus tabulā: katrs iekšējais saraksts ir viena rinda, bet katra vērtība tajā ir kolonna.
Vienkārša 3 × 3 tabula
skaitli = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
print(skaitli)Ārējā sarakstā ir trīs rindas. Katrā rindā ir trīs elementi.
Tic Tac Toe spēles laukums
Spēles sākumā visas deviņas šūnas ir tukšas. Tukšu šūnu attēlojam ar atstarpi.
laukums = [
[" ", " ", " "],
[" ", " ", " "],
[" ", " ", " "]
]
print(laukums)Rindas un kolonnas indeksi
Lai iegūtu šūnas vērtību, izmanto divus indeksus: laukums[rinda][kolonna]. Abi indeksu skaitījumi sākas ar 0.
Izlasi un nomaini šūnu
laukums = [
[" ", " ", " "],
[" ", " ", " "],
[" ", " ", " "]
]
print(laukums[0][1]) # pirmā rinda, otrā kolonna
laukums[0][1] = "X"
print(laukums[0][1])Pirmais indekss izvēlas rindu, otrais — elementu šajā rindā. Pēc piešķiršanas šajā šūnā atrodas X.
laukums[1][2] nozīmē otrā rinda un trešā kolonna. Abas vērtības ir indeksi, tāpēc tās sākas no 0.Izdrukā spēles laukumu
Ar ciklu var iziet cauri rindām un izdrukāt tās lasāmā veidā. Funkcija join() ievieto atdalītāju starp rindas elementiem.
Parādi katru rindu
laukums = [
["X", "O", "X"],
[" ", "X", " "],
["O", " ", "O"]
]
for rinda in laukums:
print(" | ".join(rinda))Parādi arī rindu atdalītājus
for indekss in range(3):
print(" | ".join(laukums[indekss]))
if indekss < 2:
print("---------")Nosacījums neizdrukā atdalītāju pēc pēdējās rindas.
Tic Tac Toe gājiens un uzvaras rinda
Spēles gājienu var aprakstīt ar rindas un kolonnas indeksu. Pirms gājiena pārbaudām, vai izvēlētā šūna vēl ir tukša.
Ievieto spēlētāja simbolu
laukums = [
["X", "O", " "],
[" ", "X", " "],
["O", " ", "O"]
]
rinda = 1
kolonna = 2
if laukums[rinda][kolonna] == " ":
laukums[rinda][kolonna] = "X"
print("Gājiens veikts")
else:
print("Šī šūna jau ir aizņemta")
for rinda in laukums:
print(" | ".join(rinda))Pārbaudi vienu uzvaras rindu
Trīs vienādi spēlētāja simboli rindā nozīmē uzvaru. Šis piemērs pārbauda augšējo rindu.
laukums = [
["X", "X", "X"],
["O", " ", "O"],
[" ", "O", " "]
]
if laukums[0][0] == laukums[0][1] == laukums[0][2] == "X":
print("X uzvar!")Līdzīgā veidā vari pārbaudīt pārējās rindas, kolonnas un abas diagonāles.
if pārbauda, vai gājiens ir atļauts.Praktiskie uzdevumi
1. Izveido savu laukumu
Izveido 3 × 3 tukšu Tic Tac Toe laukumu un izdrukā to ar print().
2. Piekļūsti šūnām
Izdrukā laukuma vidējo šūnu. Pēc tam nomaini apakšējās rindas pirmo elementu uz O.
3. Izdrukā visu laukumu
Izmanto ciklu, lai katru rindu parādītu atsevišķā rindā, pievienojot | starp šūnām.
4. Veic gājienu
Iestati mainīgos rinda un kolonna. Ar if pārbaudi, vai šūna ir tukša, un tad ievieto spēlētāja simbolu.
5. Atrodi uzvarētāju
Papildini piemēru, lai tas pārbauda arī kādu kolonnu vai diagonāli. Pievieno komentāru, kas paskaidro izvēlētos indeksus.
Ko esi apguvis?
- Divdimensiju saraksts glabā iekšējos sarakstus, kas var attēlot rindas un kolonnas.
- Elementam piekļūst ar diviem indeksiem:
saraksts[rinda][kolonna]. - Indeksi sākas no 0, un elementa vērtību var mainīt ar piešķiršanu.
- Cikls var iziet cauri rindām un izdrukāt tabulu lasāmā veidā.
- Tic Tac Toe laukumu var attēlot kā 3 × 3 sarakstu un ar nosacījumiem pārbaudīt gājienu vai uzvaras rindu.
Pašpārbaudes tests
Pārbaudi savas zināšanas par divdimensiju sarakstiem un spēles laukuma indeksiem!