Etsitään sanat merkkijonosta ja katsotaan, ovatko vierekkäiset sanat anagrammeja.
mjono = "laiva vaali euro auto kaasu jarru aatto aaato markanmargarita arrakanagrammit" #Laitetaan sanat listaan. mjonot = list(map(str,mjono.split(' '))) #Katsotaan ovatko vierekkäiset sanat anagrammeja. onko = True #Sanoja täytyy olla parillinen määrä. if (len(mjonot) % 2 == 0): for x in range(0,len(mjonot),2): #Oletetaan, että ovat anagrammeja, ellei toisin todisteta. onko = True #Järjestetään mjonot, etta niitä olisi helpompi käsitellä. mjn_1 = mjonot[x] mjn_2 = mjonot[x+1] #Katsotaan, ovatko anagrammeja. if (len(mjn_1) == len(mjn_2)): mj_1 = [] mj_2 = [] for i in mjn_1: mj_1.append(i) for i in mjn_2: mj_2.append(i) mj_1.sort() mj_2.sort() #Käydään mjonot läpi. for i in range(len(mj_1)): if (mj_1[i] != mj_2[i]): onko = False else: onko = False #Näytetään tulokset. if (onko == True): print(mjn_1 + " " + mjn_2 + " ovat anagrammeja.") else: print(mjn_1 + " " + mjn_2 + " eivät ole anagrammeja.")
Kannattaisi noin pitkässä koodissa jo käyttää funktioita. Esimerkiksi anagrammin tarkastuksesta voi tehdä funktion, jolloin säästyy tuolta vaikeasti seurattavalta onko-muuttujalta. Toisaalta anagrammin tarkastuksen voi tehdä myös paljon helpommin, jolloin erillinen funktio ei enää ole tarpeen:
teksti = "kissa kassi hepo hoopo" sanat = teksti.split() for i in range(0, len(sanat), 2): a = sanat[i] if i == len(sanat) - 1: print(f"{a} on pariton.") else: b = sanat[i+1] if sorted(a) == sorted(b): print(f"{a} ja {b} ovat anagrammeja.") else: print(f"{a} ja {b} eivät ole anagrammeja.")
Toinen lähestymistapa anagrammin etsintään:
kirjaimet = [c for c in a] try: all(kirjaimet.remove(c) for c in b) print(f"{a} ja {b} ovat anagrammeja.") except: print(f"{a} ja {b} eivät ole anagrammeja.")
Minkälaisia asioita olet oppinut niistä kommenteista, joita olet lukuisiin tämän tason koodeihisi saanut? Koodin laatu näyttää pysyneen samana kommenteista huolimatta.
Lopeta nyt edes trollin ruokkiminen, Metabolix, josset aio muuta tehdä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.