Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: Python: Anagrammit

JRokka [04.12.2019 18:59:43]

#

Etsitään sanat merkkijonosta ja katsotaan, ovatko vierekkäiset sanat anagrammeja.

Koodi

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.")

Metabolix [04.12.2019 21:14:05]

#

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.

The Alchemist [05.12.2019 04:41:29]

#

Lopeta nyt edes trollin ruokkiminen, Metabolix, josset aio muuta tehdä.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta