Python Vadovėlis/Sąrašai
Kintamieji, turintys daugiau nei vieną reikšmę
Tu jau žinai įprastus kintamuosius, kuriuose saugoma viena reikšmė. Tačiau kiti kintamųjų tipai gali turėti daugiau nei vieną reikšmę. Jie vadinami konteineriais (containers), nes juose gali būti daugiau nei vienas objektas. Paprasčiausias tipas vadinamas sąrašu (list). Sąrašo pavyzdys:
kuris = int(input("Kuris mėnuo (1-12)? "))
mėnesiai = ["Sausis", "Vasaris", "Kovas", "Balandis", "Gegužė", "Birželis", "Liepa",
"Rugpjūtis", "Rugsėjis", "Spalis", "Lapkritis", "Gruodis"]
if 1 <= kuris <= 12:
print("Mėnuo yra ", mėnesiai[kuris - 1])
pavyzdžio išvestis būtų:
Kuris mėnuo (1-12)? 3 Mėnuo yra Kovas
Šiame pavyzdyje mėnesiai
yra sąrašas. Kintamasis mėnesiai
yra apibrėžtas šia eilute mėnesiai = ["Sausis", "Vasaris", "Kovas", "Balandis", "Gegužė", "Birželis", "Liepa",
ir "Rugpjūtis", "Rugsėjis", "Spalis", "Lapkritis", "Gruodis"]
(atkreipk dėmesį, kad viena komanda parašyta per dvi eilutes; paprastai keliant eilutę yra naudojamas simbolis / tačiau šiuo atveju jis nėra būtinas, nes Python'as supranta, kad viskas, kas yra laužtiniuose skliaustuose yra kartu). [
ir ]
pradeda ir užbaigia sąrašą, o kableliai (,
) atskiria sąrašo elementus. Sąrašas naudojamas šioje dalyje: mėnesiai[kuris - 1]
. Sąrašas susideda iš elementų, kurie sunumeruoti pradedant nuo 0. Kitaip tariant, norint sąraše pasiekti elementą "Sausis", turėtum rašyti mėnesiai[0]
. Nurodant sąrašui skaičių, tu gauni reikšmę išsaugotą toje sąrašo pozicijoje.
Sąlyginis sakinys if 1 <= kuris <= 12:
tikrina, ar skaičius kintamajame kuris
yra tarp vieno ir dvylikos imtinai (tiek yra mėnesių ir taip jie numeruojami).
Viename sąraše gali būti saugomi ir skirtingų tipų duomenys. Kiekvienas elementas saugo vis kitą reikšmę. Pavyzdžiui, sąrašas sukurtas šiuo kodu: demoSąrašas = ["gyvybė", 42, "visata", 6, "ir", 9]
atrodytų taip:
elemento numeris | 0 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|---|
demoSąrašas | "gyvybė" | 42 | "visata" | 6 | "ir" | 9 |
Kiekvienas elementas pasiekiamas per jo eilės numerį – indeksą, todėl komanda demoSąrašas[0]
pateiktų reikšmę: "gyvybė"
, o komanda demoSąrašas[1]
– reikšmę 42
ir taip toliau iki kol demoSąrašas[5]
pateikia reikšmę 9
.
Daugiau sąrašų funkcijų
Kitas pavyzdys yra skirtas parodyti daugybę kitų dalykų, kuriuos gali padaryti sąrašai (šį kartą nesitikiu, kad viską pats sugebėsi parašyti, bet tikriausiai turėtum šiek tiek pažaisti su sąrašais interaktyviame režime, kol apsiprasi su jais). Pavyzdys:
demoSąrašas = ["gyvybė", 42, "visata", 6, "ir", 9]
print("demoSąrašas = ", demoSąrašas)
demoSąrašas.append("oras")
print("po 'oras' pridėjimo, demoSąrašas atrodo taip:")
print(demoSąrašas)
print("len(demoSąrašas) =", len(demoSąrašas))
print("demoSąrašas.index(42) =", demoSąrašas.index(42))
print("demoSąrašas[1] =", demoSąrašas[1])
# o dabar mes pereisime per visą sąrašą "for" ciklu
for c in range(len(demoSąrašas)):
print("demoSąrašas[", c, "] =", demoSąrašas[c])
del demoSąrašas[2]
print("Po 'visata' pašalinimo, demoSąrašas atrodo taip:")
print(demoSąrašas)
if "gyvybė" in demoSąrašas:
print("'gyvybė' buvo rasta kintamajame demoSąrašas")
else:
print("'gyvybė' nebuvo rasta kintamajame demoSąrašas")
if "ameba" in demoSąrašas:
print("'ameba' buvo rasta kintamajame demoSąrašas")
if "ameba" not in demoSąrašas:
print("'ameba' nebuvo rasta kintamajame demoSąrašas")
kitasSąrašas = [42, 7, 0, 123]
kitasSąrašas.sort()
print("Išrikiuotas kitasSąrašas atrodo taip", kitasSąrašas)
Kodo išvestis būtų tokia:
demoSąrašas = ["gyvybė", 42, "visata", 6, "ir", 9] po "oras" pridėjimo, demoSąrašas atrodo taip: ["gyvybė", 42, "visata", 6, "ir", 9, "oras"] len(demoSąrašas) = 7 demoSąrašas.index(42) = 1 demoSąrašas[1] = 42 demoSąrašas[ 0 ] = gyvybė demoSąrašas[ 1 ] = 42 demoSąrašas[ 2 ] = visata demoSąrašas[ 3 ] = 6 demoSąrašas[ 4 ] = ir demoSąrašas[ 5 ] = 9 demoSąrašas[ 6 ] = oras Po 'visata' pašalinimo, demoSąrašas atrodo taip: ["gyvybė", 42, 6, "ir", 9, "oras"] "gyvybė" buvo rasta kintamajame demoSąrašas "ameba" nebuvo rasta kintamajame demoSąrašas Išrikiuotas kitasSąrašas atrodo taip [0, 7, 42, 123]
Šiame pavyzdyje rasi daug naujų funkcijų. Atkreipk dėmesį, kad gali tiesiog atspausdinti (print
) visą sąrašą. Toliau funkcija append
naudojama tam, kad pridėtum naują elementą į sąrašo pabaigą. len
grąžina kiek elementų yra sąraše. Tinkami sąrašo indeksai (skaičiai kuriuos naudojame viduje laužtinių skliaustų []
) yra nuo 0 iki len - 1
. Funkcija index
nurodo, kur sąraše yra pirmoji elemento vieta. Atkreipk dėmesį, kaip demoSąrašas.index(42)
pateikia 1, o paleidus demoSąrašas[1]
grąžina 42. Norint gauti pagalbos dėl visų sąrašo funkcijų, įvykdyk komandą help(list)
interaktyviajame Python'o interpretatoriuje.
Eilutė # o dabar mes pereisime per visą sąrašą
yra tik priminimas programuotojui (dar vadinamas kaip „komentaras“). Python'as ignoruoja viską, kas parašyta esamoje eilutėje po simbolio for
ciklu#
. Toliau eilutės:
for c in range(len(demoSąrašas)):
print("demoSąrašas[", c, "] =", demoSąrašas[c])
sukuria kintamajį c
, kuris prasideda nuo 0 ir didinamas vienetu, kol pasiekia paskutinį sąrašo indeksą. Tuo tarpu print
komanda išspausdina kiekvieną sąrašo elementą.
Daug geresnis būdas tai padaryti:
for c, x in enumerate(demoSąrašas):
print("demoSąrašas[", c, "] =", x)
Komanda del
gali būti naudojama tam tikram sąrašo elementui pašalinti. Kitos kelios eilutės naudoja in
operatorių, kad patikrintų, ar elementas yra sąraše, ar ne. Funkcija sort
rūšiuoja sąrašą. Tai naudinga, jei tau reikia sąrašo nuo mažiausio iki didžiausio arba abėcėlės tvarka. Atmink, kad tai pakeičia sąrašą. Apibendrinant, su sąrašu yra atliekami šie veiksmai:
pavyzdys | paaiškinimas |
---|---|
demoSąrašas[2]
|
grąžina 2 sąrašo demoSąrašas elementą |
demoSąrašas[2] = 3
|
į sąrašo demoSąrašas 2 poziciją (numeruojama nuo 0) įrašo reikšmę 3 |
del demoSąrašas[2]
|
pašalina sąrašo demoSąrašas elementą, esantį 2 pozicijoje |
len(demoSąrašas)
|
grąžina demoSąrašas sąrašo ilgį, t.y. elementų skaičių
|
"reikšmė" in demoSąrašas
|
yra True jeigu "reikšmė" yra elementas, priklausantis demoSąrašas
|
"reikšmė" not in demoSąrašas
|
yra True jeigu "reikšmė" nėra elementas, priklausantis demoSąrašas
|
kitasSąrašas.sort()
|
surūšiuoja kitasSąrašas . Atmink, kad rūšiavimas pavyktų, visi sąrašo elementai turi būti arba skaičiai, arba eilutės (string).
|
demoSąrašas.index("reikšmė")
|
grąžina pirmosios vietos, kurioje atsiranda "reikšmė" , indeksą
|
demoSąrašas.append("reikšmė")
|
sąrašo pabaigoje prideda elementą "reikšmė"
|
demoSąrašas.remove("reikšmė")
|
pašalina pirmą rastą elementą su nurodyta reikšme iš demoSąrašas (taip pat, kaip del demoSąrašas[demoSąrašas.index("reikšmė")] )
|
Pavyzdžiai, kur praktiškai naudojamos šios funkcijos:
meniuElementas = 0
vardųSarašas = []
while meniuElementas != 9:
print("--------------------")
print("1. Spausdinti sąrašą")
print("2. Pridėti vardą prie sąrašo")
print("3. Pašalinti vardą iš sąrašo")
print("4. Pakeisti elementą sąraše")
print("9. Išeiti")
meniuElementas = int(input("Pasirinkite elementą iš meniu: "))
if meniuElementas == 1:
dabartinis = 0
if len(vardųSarašas) > 0:
while dabartinis < len(vardųSarašas):
print(dabartinis, ".", vardųSarašas[dabartinis])
dabartinis = dabartinis + 1
else:
print("Sąrašas tuščias")
elif meniuElementas == 2:
vardas = input("Įveskite vardą, kurį norite pridėti: ")
vardųSarašas.append(vardas)
elif meniuElementas == 3:
šalinamasVardas = input("Kokį vardą norėtumėte pašalinti:")
if šalinamasVardas in vardųSarašas:
# vardųSarašas.remove(šalinamasVardas) veiktų taip pat gerai
elementoIndeksas = vardųSarašas.index(šalinamasVardas)
del vardųSarašas[elementoIndeksas]
# Aukščiau pateiktas kodas pašalina tik pirmąjį surasta vardą.
# Žemiau esantis kodas pašalina visus.
# while šalinamasVardas in vardųSarašas:
# elementoIndeksas = vardųSarašas.index(šalinamasVardas)
# del vardųSarašas[elementoIndeksas]
else:
print(šalinamasVardas, "nerastas")
elif meniuElementas == 4:
senasVardas = input("Kokį vardą norėtumėte pakeisti:")
if senasVardas in vardųSarašas:
elementoIndeksas = vardųSarašas.index(senasVardas)
naujasVardas = input("Koks yra naujas vardas: ")
vardųSarašas[elementoIndeksas] = naujasVardas
else:
print(senasVardas, "nerastas")
print("Iki pasimatymo")
Ir čia yra išvesties dalis:
-------------------- 1. Spausdinti sąrašą 2. Pridėti vardą prie sąrašo 3. Pašalinti vardą iš sąrašo 4. Pakeisti elementą sąraše 9. Išeiti Pasirinkite elementą iš meniu: 2 Įveskite vardą, kurį norite pridėti: Benas Pasirinkite elementą iš meniu: 2 Įveskite vardą, kurį norite pridėti: Liepa Pasirinkite elementą iš meniu: 1 0. Benas 1. Liepa Pasirinkite elementą iš meniu: 3 Kokį vardą norėtumėte pašalinti: Benas Pasirinkite elementą iš meniu: 4 Kokį vardą norėtumėte pakeisti: Liepa Koks yra naujas vardas: Liepa Petraitė Pasirinkite elementą iš meniu: 1 0. Liepa Petraitė Pasirinkite elementą iš meniu: 9 Iki pasimatymo
Tai buvo ilga programa. Panagrinėkime pirminį programos tekstą. Eilutė vardųSarašas = []
sukuria kintamajį vardųSarašas
, tuščia sąrašą, be elementų. Kita svarbi eilutė yra while meniuElementas != 9:
. Ši eilutė pradeda ciklą, leidžiantį šios programos meniu sistemai veikti. Kitos eilutės parodo meniu ir nusprendžia, kurią programos dalį paleisti.
Ši dalis:
dabartinis = 0
if len(vardųSarašas) > 0:
while dabartinis < len(vardųSarašas):
print(dabartinis, ".", vardųSarašas[dabartinis])
dabartinis = dabartinis + 1
else:
print("Sąrašas tuščias")
eina per sąrašą ir spausdina kiekvieną vardą. len(vardųSarašas)
nurodo, kiek elementų yra sąraše. Jei len
grąžina 0
, tai reiškia sąrašas tuščias.
Toliau po kelių eilučių matysi sakinį vardųSarašas.append(vardas)
. Jis naudoja funkciją append
, kad pridėtų elementą į sąrašo pabaigą. Peršokus dar dvi eilutes, pastebėsi šią kodo dalį:
elementoIndeksas = vardųSarašas.index(šalinamasVardas)
del vardųSarašas[elementoIndeksas]
Čia funkcija index
yra naudojama norint rasti indekso reikšmę, kuri vėliau bus naudojama elementui pašalinti. del vardųSarašas[elementoIndeksas]
naudojamas sąrašo elementui pašalinti.
Kitoje kodo dalyje
senasVardas = input("Kokį vardą norėtumėte pakeisti:")
if senasVardas in vardųSarašas:
elementoIndeksas = vardųSarašas.index(senasVardas)
naujasVardas = input("Koks yra naujas vardas: ")
vardųSarašas[elementoIndeksas] = naujasVardas
else:
print(senasVardas, "nerastas")
naudojamas index
, kad surastų elementoIndeksas
ir tada įdėtų naujasVardas
ten, kur buvo senasVardas
.
Sveikinu, perpratus sąrašus, dabar tu pakankamai žinai kalbą, kad galėtum atlikti bet kokius skaičiavimus, kuriuos gali atlikti kompiuteris (tai techniškai žinoma kaip Turing-Completeness). Žinoma, vis dar yra daug funkcijų, kurias naudojant tu pasilengvinsi sau gyvenimą.
Pavyzdžiai
testas.py
## Ši programa atlieka žinių patikrinimą
# Pirmiausia surenkame testo klausimus.
# Vėliau šią dalį pakeisime, kad būtų naudojama failinė sistema.
def gauti_klausimus():
# atkreipk dėmesį, kad duomenys saugomi kaip sąrašų sąrašas
return [["Kokios spalvos yra dangus giedrą dieną? ", "mėlynas"],
["Koks atsakymas į gyvenimą, visatą ir viską? ", "42"],
["Kas yra keturių raidžių žodis pelės gaudyklei? ", "katė"]]
# Ši dalis patikrins vieną klausimą
# pateikiamas vienas klausimas
# grąžinama teisinga (True), jei vartotojas įvedė teisingą atsakymą, kitu atveju - klaidinga (False)
def pateik_klausimą(klausimas_ir_atsakymas):
# ištraukiame klausimą ir atsakymą iš sąrašo
# Ši funkcija priima dviejų elementų sąrašą, klausimą ir atsakymą.
klausimas = klausimas_ir_atsakymas[0]
atsakymas = klausimas_ir_atsakymas[1]
# užduodame klausimą vartotojui
duotas_atsakymas = input(klausimas)
# palyginame vartotojo atsakymą su teisingu atsakymu
if atsakymas == duotas_atsakymas:
print("Teisingai")
return True
else:
print("Neteisingai. Teisingas atsakymas: ", atsakymas)
return False
# Šis kodas apims visus klausimus
def atlikti_testus(klausimai):
if len(klausimai) == 0:
print("Nepateiktas nei vienas klausimas.")
# `return` išeis iš funkcijos
return
indeksas = 0
teisingai = 0
while indeksas < len(klausimai):
# patikriname klausimą
# Atkreipk dėmesį, kad tai yra klausimų ir atsakymų sąrašo ištraukimas iš sąrašų sąrašo.
if pateik_klausimą(klausimai[indeksas]):
teisingai = teisingai + 1
# pareiname prie kito klausimo
indeksas = indeksas + 1
# atkreipk dėmesį į skaičiavimo tvarką: pirmiausia padaugini, tada padalini
print("Atsakei teisingai į ", teisingai * 100 / len(klausimai),\
"% klausimų iš ", len(klausimai))
# dabar paimkime klausimus iš funkcijos gauti_klausimus ir
# paduokime grąžintą sąrašų sąrašą kaip argumentą funkcijai atlikti_testus.
atlikti_testus(gauti_klausimus())
Reikšmės True
ir False
turi reikšmes atitinkamai 1 ir 0. Jie dažnai naudojami loginės sekos patikrinimui, ciklo sąlygoms ir pan. Daugiau apie tai sužinosi šiek tiek vėliau (skyrius Loginiai reiškiniai).
Atkreipk dėmesį, kad gauti_klausimus() iš esmės yra sąrašas, nors tai techniškai yra funkcija - sąrašų grąžinimas yra vienintelis dalykas, kurį jis daro.
Pavyzdžio išvestis:
Kokios spalvos yra dangus giedrą dieną? žalias Neteisingai. Teisingas atsakymas: mėlynas Koks atsakymas į gyvenimą, visatą ir viską? 42 Teisingai Kas yra keturių raidžių žodis pelės gaudyklei? katė Teisingai Atsakei teisingai į 66% klausimų iš 3
Pratimai
Išplėsk testas.py programą, kad ji turėtų meniu, kuriame būtų galima atlikti testą, peržiūrėti klausimų ir atsakymų sąrašą ir pasirinkti išeiti iš programos. Taip pat, pridėk naują klausimą: „Kokį triukšmą kelia tikrai pažangi mašina?“ su teisingu atsakymu „ping“.
Sprendimas | |
---|---|
## Ši programa atlieka žinių patikrinimą
klausimai = [["Kokios spalvos yra dangus giedrą dieną? ", "mėlynas"],
["Koks atsakymas į gyvenimą, visatą ir viską? ", "42"],
["Kas yra keturių raidžių žodis pelės gaudyklei? ", "katė"],
["Kokį triukšmą kelia tikrai pažangi mašina?", "ping"]]
# Ši dalis patikrins vieną klausimą
# pateikiamas vienas klausimas
# grąžinama teisinga (True), jei vartotojas įvedė teisingą atsakymą, kitu atveju - klaidinga (False)
def pateik_klausimą(klausimas_ir_atsakymas):
# ištraukiame klausimą ir atsakymą iš sąrašo
# Ši funkcija priima dviejų elementų sąrašą, klausimą ir atsakymą.
klausimas = klausimas_ir_atsakymas[0]
atsakymas = klausimas_ir_atsakymas[1]
# užduodame klausimą vartotojui
duotas_atsakymas = input(klausimas)
# palyginame vartotojo atsakymą su teisingu atsakymu
if atsakymas == duotas_atsakymas:
print("Teisingai")
return True
else:
print("Neteisingai. Teisingas atsakymas: ", atsakymas)
return False
# Šis kodas apims visus klausimus
def atlikti_testus(klausimai):
if len(klausimai) == 0:
print("Nepateiktas nei vienas klausimas.")
# `return` išeis iš funkcijos
return
indeksas = 0
teisingai = 0
while indeksas < len(klausimai):
# patikriname klausimą
# Atkreipk dėmesį, kad tai yra klausimų ir atsakymų sąrašo ištraukimas iš sąrašų sąrašo.
if pateik_klausimą(klausimai[indeksas]):
teisingai = teisingai + 1
# pareiname prie kito klausimo
indeksas = indeksas + 1
# atkreipk dėmesį į skaičiavimo tvarką: pirmiausia padaugini, tada padalini
print("Atsakei teisingai į ", teisingai * 100 / len(klausimai),\
"% klausimų iš ", len(klausimai))
#rodomas klausimų ir atsakymų sąrašas
def rodyk_klausimus():
k = 0
while k < len(klausimai):
a = 0
print("K:" , klausimai[k][a])
a = 1
print("A:" , klausimai[k][a])
k = k + 1
# dabar apibrėžiu meniu funkciją
def meniu():
print("-----------------")
print("Meniu:")
print("1 - Atlikti testą")
print("2 - Peržiūrėti klausimų ir atsakymų sąrašą")
print("3 - Peržiūrėti meniu")
print("5 - Išeiti")
print("-----------------")
pasirinkimas = "3"
while pasirinkimas != "5":
if pasirinkimas == "1":
atlikti_testus(klausimai)
elif pasirinkimas == "2":
rodyk_klausimus()
elif pasirinkimas == "3":
meniu()
print()
pasirinkimas = input("Pasirinkite savo parinktį iš aukščiau pateikto meniu: ")
|