TypeError: 'set' object is not subscriptable

'Kirjasto'-koodini alkaa valmistua, mutta herjaa rivillä 41: TypeError: 'set' object is not subscriptable. Enkä saa sitä poistumaan millään. Osaako joku auttaa?



#_Tämä on Katjaanan sellainen harjoitus, joka myös tallentaa, jos osaan sen tehdä.

tiedosto = open("kirjasto.txt", "a") #_Avataan tiedosto, johon tallennetaan.

#_Poistin alla olevat, sillä olivat kovakoodattuja.
#_List = [{"kirja":"Peppi Pitkätossu", "kirjailija":"Astrid Lindgren", "jv":"1945"},
#_{"kirja":"Vaahteramäen Eemeli", "kirjailija":"Astrid Lindgren", "jv":"1963"},
#_{"kirja":"Pikku naisia", "kirjailija":"Louisa M. Alcott", "jv":"1868"},
#_{"kirja":"Annan nuoruusvuodet", "kirjailija":"L. M. Montgomery", "jv":"1908"}]

#_Alla oleva tallennusrutiini tallentaa yhden kirjan yhdelle riville.
List = [{"kirja1", "kirjailija1", "jv1"
"kirja2", "kirjailija2", "jv2"
"kirja3", "kirjailija3", "jv3"}]

#_Kirjat luetaan tiedostoon talteen alla olevalla tavalla.
def lataaTiedot(tiedosto):
lista = []
with open(tiedosto, 'r') as tiedostoObjekti:
for rivi in tiedostoObjekti:
kirja = rivi.replace("\n","").split(',')
if len(kirja) == 3:
lista.append({"kirja": kirja[0], "kirjailija": kirja[1], "jv": kirja[2]})
return lista

#_Kirjat tulostetaan alla olevalla tavalla.
print(lataaTiedot("kirjasto.txt"))
[{'kirja': 'kirja1', 'kirjailija': 'kirjailija1', 'jv': 'jv1'}, {'kirja': 'kirja2', 'kirjailija':
'kirjailija2', 'jv': 'jv2'}, {'kirja': 'kirja3', 'kirjailija': 'kirjailija3', 'jv': 'jv3'}]

tiedosto.close() #_Suljetaan tiedosto, johon on tallennettu.

#-----ALKAA Funktioiden esittely----------------------------------------

#Näitä kahta funktiota tarvitaan, kun etsitään, onko kirjastossa haluttua kirjaa ja
#kun poistetaan kirjaa.

#Etsitään onko List:ssä kirjaa.
def onkoKirjaa(kirja):
for x in List:
if x["kirja"]==kirja: return True
return False

#Palautetaan kirja.
def getKirja(kirja):
for x in List:
if x["kirja"]==kirja: return x
return None

#-----LOPPUU Funktioiden esittely---------------------------------------

print("Tervetuloa Kirjakauppaan!", "\n", "\n" #Näin saat tekstiin rivinvaihdon lisäksi välirivin.
"Uuden kirjan lisäys Kirjakauppaan:", "\n"
"Jos et nyt halua lisätä kirjaa, niin lisää numero nolla seuraaviin kohtiin, muutoin anna pyydetyt tiedot:")
kirja = input("Kirjan nimi: ")
kirjailija = input("Kirjailijan nimi: ")
jv = input("Julkaisuvuosi: ")

#-----ALKAA Lisätään appendilla uusi kirja------------------------------

#Lisätään uusi tuote List:aan
uusiKirja = {"kirja":kirja, "kirjailija":kirjailija, "jv":jv}

if kirja != "0" and kirjailija != "0" and jv != "0": #Blokkaa pois sen, että nollat tallentuisivat uutena kirjana jne.
List.append(uusiKirja)

#-----LOPPUU Lisätään appendilla uusi kirja-----------------------------

tiedosto = open("kirjasto.txt", "w") #Tiedostokahvalle nimeksi tiedosto ja uuden
#tiedoston avaaminen kirjoittamista varten.

#Pyyntö kirjoittaa yllä pyydetyt tiedot tiedostoon riveittäin.
tiedosto.write(kirja "\n")
tiedosto.write(kirjailija "\n")
tiedosto.write(jv "\n")

tiedosto.close() #Tiedoston sulkeminen.

tiedosto = open("kirjasto.txt", "r") #Tiedoston avaaminen lukemista varten.

while True:

print("Anna valitsemasi kirjan nimi, niin tulostan sen, jos se löytyy kirjastosta.")
print("Komennolla Kaikki tulostetaan kaikki kirjaston kirjat.")
print("Komennolla Poista poistetaan valitsemasi kirjaston kirja.")
print("Komennolla Poistu, tämä kirjasto-ohjelma sulkeutuu.")

valinta = input().capitalize() #Asiakas voi syöttää vastauksensa, joka alkaa pienellä kirjaimella esim. poistu -> Poistu

if valinta == "Poistu": #Ohjelmasta poistuminen.
break

elif valinta == "Kaikki": #Kaikkien kirjaston kirjojen tulostaminen.
for x in List:
print(x["kirja"])
print(x["kirjailija"])
print(x["jv"], "\n") #\n erottelee tulokset toisistaan = tyhjä rivi

elif onkoKirjaa(valinta): #Tulostaa pyydetyn kirjan, jos se on kirjastossa.
print(getKirja(valinta))

#elif valinta == "Poista":
elif onkoKirjaa(valinta): #Etsitään, onko List:ssä kirjaa.
print(getKirja(valinta)) #Palautetaan kirja.
elif valinta == "Poista": #Poistaa pyydetyn kirjan kirjastosta.
poistettava = input ("Minkä kirjan haluat poistaa? ")
for i in range(len(List)):
if List[i]['kirja'] == poistettava:
del List[i]
break

print("Jäljelle jääneet kirjat:\n" ", ".join(x["kirja"] for x in List))

else:

print("Syötteesi oli virheellinen, tai tätä kirjaa ei ole tässä kirjastossa.")

tiedosto.close() #Suljetaan tiedosto.

0

290

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000

      Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

      Luetuimmat keskustelut

      1. Ampuminen kylpylässä

        Onko vornasen timbe käynyt hiukan kylpemässä vai mikä tämä ampumatapaus on kylpylässä? Tuntuu aika villi meno olevan naa
        Naantali
        105
        2324
      2. Kemijärvellä vesionnettomuus

        Pitkänsillan ja taiteilijanniemen välillä nähty henkilön painuvan veden alle. Mitä on tapahtunut? Onko vesihiisi taas as
        Kemijärvi
        42
        1588
      3. Hei, voitko kuunnella

        Voisitko auttaa minua selvittämään asioita? En halua ajaa sinua hulluuteen kanssani, en sitoa sinua, en esittää vaatimu
        Ikävä
        138
        1114
      4. 113
        1110
      5. Joku porukka lähtenyt täältä

        Ihmeen hiljainen on palsta nyt. Yleensä tänne tulvii aloituksia yms, mutta nyt on kyllä erikoisen hiljaista.
        Ikävä
        232
        1058
      6. Costa Rica on tympeän makuinen kahvi

        Ostin kahvin hinnan romahduksen kunniaksi Costa Rican "Premium Blendiä". Piti olla sataprosenttista arabialaista. No ain
        Maailman menoa
        57
        910
      7. Miten yrität

        Vielä saada kaivattusi?
        Ikävä
        82
        886
      8. Se kun olit pitkästä aikaa silmieni edessä

        Oli kyllä sykähdyttävää. Tiedätkö, mikä laittaa minut ikävöimään sinua? Kun palautan mieleeni valtavan ihanan olemuksen,
        Ikävä
        54
        810
      9. Tuletko tänään

        Jos soitan? Niin... tuletko?🖤
        Ikävä
        81
        801
      10. Olipa yllätys

        Kuten hyvin moni tiesi/arvasi että valetta alusta loppuun toi *olemme ystäviä* satu. Instassaan käsi kädessä kuva kertoo
        Kotimaiset julkkisjuorut
        215
        774
      11. 54
        771
      12. Muutto auto hakee sut tänään!

        Tein sulle oman huoneen! mieheltä naiselle
        Ikävä
        93
        749
      13. Kiinni jäit

        Ei olisi uskonut sinusta
        Ikävä
        40
        686
      14. On todella ikävää

        Todella ikävää, että asiat ovat menneet tällaisiksi. Tämä ei ollut missään vaiheessa tarkoitukseni. Olen tehnyt virheit
        Ikävä
        79
        668
      15. Oletteko koskaan torjuneet kaivattuanne?

        Minä olen, kun en silloin tajunnut vielä ihastuneeni. Yritin paikata tapahtunutta, mutta ei onnistunut enää.
        Ikävä
        31
        617
      16. Nyt ei enää ole

        Mitään mikä pitäisi mut hiljaa, kaikesta. Tämä on muutamalle henkilölle täällä.
        Ikävä
        39
        535
      17. Ottanet yhteyttä

        Facebookissa,jos on jotain asiaa.Miehelle! T.M-nainen.
        Ikävä
        55
        527
      18. Hämmentävä hetki: TTK:sta pudonnut Johanna Puhakka lataa pettyneenä: "Sitä ei voi kieltää"

        Johanna Puhakka ja Jurijs Jurza Trosenko tippuivat Tanssii Tähtien Kanssa -kisasta. Suositussa viihdeohjelmassa nähtiin
        Tanssii tähtien kanssa
        14
        510
      19. Kai sä mies ymmärrät..

        ..ettet jättänyt vaihtoahtoa. Tottakai toivon vielä, että pystyisit toimimaan niin että asiat korjaantuisivat. Vahvast
        Ikävä
        30
        502
      20. Onkin niin, että olet hulluna minuun

        mutta et uskalla sitä tuoda ilmi. Salaa haaveilet kiihkeästä suhteesta, vaan siihen se jää, ja syyksi esteet ja muut. S
        Ikävä
        26
        498
      Aihe