Liste döndürme sorunu

Bu kodda döndürülmüş başarılı bir kelime sonrasındaki kelime atlanıyor. Bu kodu nasıl başarılı bir şekilde çalıştırabilirim. Ve neden bazı kelimeleri atlıyor anlatırsanız sevinirim. Tşekkürler.

        testingKelime = ['hurafe','hüda','hadi','haram','helal','hal','helak','harla','harun','hakan','horla']
        ikiHeceli   = ['ha','he','hu','hü']
        ucHeceli = ['har','hır','hil','hor']
        ucSonra = ['l','k']
        ikiAyikla = []
        for kelime in self.testingkelime:
            for hece in ikiHeceli:
                if kelime[:2] == hece:
                    ikiAyikla.append(kelime)
                    self.testingkelime.remove(kelime)
        print(f"{ikiAyikla}\n{ucAyikla}")
        print(self.testingkelime)

Çıktı:

Tek hecei, üç harfli: hal
['hurafe', 'hadi', 'helal', 'harun']
['harla', 'horla']
['hüda', 'haram', 'helak', 'hakan'] # almadıkları bu

Bir almış, bir almamış. Neden böyle oluyor? Aldığnın hemen sonrasında bulunanı bırakıyor.

Çünkü döngü içerisinde, döngü için kullandığınız listeden eleman çıkarıyorsunuz.

testingkelime isimli listenin kopyasını oluşturup, döngü için bu kopyayı kullanacak olursanız sorun çözülecektir.

testingkelime = ['hurafe','hüda','hadi','haram','helal','hal','helak','harla','harun','hakan','horla']
ikiHeceli   = ['ha','he','hu','hü']

kopya = testingkelime.copy()

ikiAyikla = []

for kelime in kopya:
    for hece in ikiHeceli:
        if kelime[:2] == hece:
            ikiAyikla.append(kelime)
            testingkelime.remove(kelime)
            break

print(ikiAyikla)
print(testingkelime)
['hurafe', 'hüda', 'hadi', 'haram', 'helal', 'hal', 'helak', 'harla', 'harun', 'hakan']
['horla']

Koşul cümlesi için tavsiye:

for kelime in kopya:
    if kelime[:2] in ikiHeceli:
        ikiAyikla.append(kelime)
        testingkelime.remove(kelime)
        continue
3 Beğeni

ben bilgisayar olsam şuralarda error verirdim.

bir kelime hem 2 heceliye hem 3 heceliye giriyorsa, ama sorgulamayı 2 heceye göre yapıp dogru sonucu nasıl verir ki. ucheceli ve ucsonra yı nerelerde kullanmayı planlıyorsun. burada sanki hecelerin uzunluğuna göre de bir işlem yapmalısın gibime geldi.

Edit: normalde heceleme 2 harf oluyor. “haram” kelimesi senin 2 li ve 3 lü hecelerine göre hem “ha” hem de “har” kısmında nasıl olacak. bunun yerine kelimenin uzunluğunu alıp kelime %2 ==0 koşuluna uyuyorsa ilk önce 2 li heceye göre işlem yapsın değilse 3 lü ye göre işlem yapsın gibi bir sonuç çıkarttım.

2 Beğeni

Şimdilik böyle bir sorunumuz yok, yukarıdaki çıktı da da görülmekte zaten. Sadece hatayı aldığım ve ilgili kısmı paylaştım.

Hakkı varmış :slight_smile:

Bu kadar basit şeyi akıl edememiş olmam üzdü beni :slight_smile:

Herkese teşekkür ederim.

2 Beğeni

Konuyu çok güzel açıklamış ve kodu çok güzel yazmışsınız teşekkürler

2 Beğeni