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
        72
        1457
      2. Moottoripyöräonnettomuus

        Mopomiitissä tapahtunut onnettomuus ja uutisointi. Ajoradan ylityksen vaarallisuudesta ei mitään uutisointia. Ei myöskää
        Alajärvi
        92
        1087
      3. haluatko lopettaa

        ihan lopullisesti
        Ikävä
        164
        967
      4. 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
        28
        941
      5. Jos oikeasti haluat mies

        Tiedät mitä on tehtävä. Luotan, että etenet jos haluat. En voi tehdä enää mitään kun ei ole numeroasi.
        Ikävä
        105
        894
      6. Uusi ruokapaikka

        Tuleeko Haapavedelle uusi lounaspaikka ,haetaan kokkia? Uusi firma kyseessä
        Haapavesi
        30
        893
      7. Hautakivien massapoisto aloitettu Härkökankaan vanhalla hautausmaalla kaikessa hiljaisuudessa!

        Suomussalmen seurakunnan kirkkoneuvosto on tehnyt historiansa surullisimman päätöksen hautojen haltuunotosta ja raivauks
        Suomussalmi
        55
        817
      8. Kerro minulle totuus

        Minä haluan kuulla sen nyt. Kenen kanssa sinä olet nykyisin, ja miksi jätit minut? 🐒
        Ikävä
        201
        802
      9. Hei, voitko kuunnella

        Voisitko auttaa minua selvittämään asioita? En halua ajaa sinua hulluuteen kanssani, en sitoa sinua, en esittää vaatimu
        Ikävä
        128
        778
      10. voi luoja kun uskaltaisin

        laittaa viestiä sinulle...
        Ikävä
        27
        744
      11. Miten sinä voit?

        Kysytkö kukaan sitä sinulta? Olen huomannut, että jos kohtaa empaattisen ihmisen ja hän kysyy noin, saattaa padot murtua
        Ikävä
        93
        717
      12. 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ä
        177
        703
      13. Miten yrität

        Vielä saada kaivattusi?
        Ikävä
        64
        654
      14. VILLISIKALAUMA TULOSSA IISALMEEN

        Yle: Poliisi varoittaa Iisalmen keskustaa lähestyvästä villisika­laumasta Poliisi on pyytänyt Pohjois-Savossa Iisalmessa
        Iisalmi
        48
        648
      15. Useita poliisiautoja kunnantalolla

        Maijojen kyydissä tuttuja naamoja ja nyt kannetaan arkistolaatikoita autoihin. Nyt se on alkanut. Pidätykset.
        Ähtäri
        12
        595
      16. Jos näkisimme vielä joskus

        ... mihin veisit miut treffeille? 😊
        Ikävä
        85
        558
      17. 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
        189
        541
      18. 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ä
        78
        540
      19. sinulle....

        Olen ymmärtänyt, ettei minua haluta enää takaisin. Mitään pahaa en koskaan halunnut sinulle. Ikävä että kuvittelit niin.
        Ikävä
        75
        507
      20. Ottanet yhteyttä

        Facebookissa,jos on jotain asiaa.Miehelle! T.M-nainen.
        Ikävä
        55
        507
      Aihe