Kelimenin string'de kaç kez geçtiğini bulma

Merhaba, string de bir kelime belirleyip o kelimenin kaç kere geçtiğini bulmam lazım, aslında count kullanabilirdim ancak bir sorun var.
Mesela basit bir cümleden örnek verelim ve sonucu görelim:

>>> "Kemal okula mum al".count("al")
2

benim beklediğim sonuç 1 yani sadece sondaki “al” ı bulması lazım ama “Kemal” deki “al” ı da buluyor. re işe yarayabilir diye düşünüyorum ama re den anlamadığım için yapamadım :sweat_smile:

Merhaba, önce kelimeleri bir şekilde elde etseniz, sonra onların içerisinde arasanız olmaz mı?

1 Beğeni

Mantıklı, cümleyi kelimelere ayırıp aradığım kelimeyi bulmayı deneyebilirim. split işe yarayabilir.

1 Beğeni

Noktalama işaretleri sorun çıkarabilir. split() ile birlikte startswith() kullanmanızda fayda var diye düşünmekteyim.

1 Beğeni

Doğru! split yöntemi işe yaradı, startswith ile daha detaylı olacak.

1 Beğeni
Spoiler
def kelimeyi_bul(cumle,kelime):
    uzunluk = len(kelime)
    sayac = 0
    for i in cumle.split():
        if uzunluk == len(i):
            sayac += 1
            # print(cumle.split())
    print(f"{kelime} kelimesi {sayac} kez geçiyor.")
kelimeyi_bul("kemal okula mum al","al") 

(Ben, Benim penceremden böyle görürdüm)
Umarım yardımcı olur fakat, üstteki insanların kod paylaşmadıysa bir bildikleri olduğundan bunu, kendince bir çözüme varamadığın sıra açmanı tavsiye ederim.

Edit: Sadece gösterdiğin örnek üzerine üretilmiş bir fikir, daha da kafa yorarak stabil olmasını sağlayabilirsin

1 Beğeni

Merhaba, kodda aynı uzunlukta 2 kelime geçince yanlış sonuç çıkıyor.

aklımda çok bir şey yoktu fikir toplayabilmek için açtım konuyu.

İlerleteceğim.

1 Beğeni
def kelimeyi_bul(cumle,kelime):
    sayac = 0
    for i in cumle.split():
        for j in kelime.split():
            if i in j:
                sayac += 1
    print(f"{kelime} kelimesi {sayac} kez geçiyor.")
kelimeyi_bul("kemal okula mum al","al")

Çözüldü gibi.

2 Beğeni

Çözüldü gerçekten. (20 karakter)

Bu kısmı "albatros") yaptığınızda ne oluyor?

hocam tabikide bu çözüm sadece arkadaşın söylediği gibi kemal kelimesinde olan değil de ayrı duran kelimeyi yani al olan kelimenin kaç tane olduğunu söylüyor. kapsamlı düşünüp sizin verdiğiniz bir örnek üzerinden bakıldığında tabikide eksiği çok fazla. ama ilk attığım koda göre ikinci attığımda yaptığım değişiklikler gibi bunda da yapılarak sizin dediğiniz örneğin içinde olan kelimeyi de sayarak istenilen sonucu verdirtebilir.

0 kez geçiyor (20 karakter)

Aranan kelimenin “al” yerine “albatros” olması durumunu kastetmiştim.

Bende onu denedim, kelimeyi albatros yapıp al ı arayınca 0 kelime buldu.

haklısınız içinde herhangi bir al sözcüğü olan her kelimeyi cümlede aranacak kelimenin sayısı kadar döndürüyor. Bu hatalı koda bakıldığında alsancak kelimesi de sizin dediğinizle benzer bir durum yaşatıyor.

Kısmen
def kelimeyi_bul(cumle,kelime):
    sayac = 0
    for i in cumle.split():
        for j in kelime.split():
            if i in j and len(i) == len(j):
                sayac += 1
    print(f"{kelime} kelimesi {sayac} kez geçiyor.")
kelimeyi_bul("kemal okula mum al","albatros")

Aynı cümle üzerinden kodda ufak bir değişiklik yapıldığında bu sorunda ortadan kalkıyor. Düşündükçe üstesinden gelinebilir giibi hocam. Siz ne dersiniz ? (umarım başka bug yoktur :sweat_smile:)

1 Beğeni

En son yolladığınız örneği de denedim ve sanırım başka bug kalmadı.
Edit: az önce Then_Shiffman’in yukarıda verdiği örneğin tersini denemişim ama kodun son halinde Then_Shiffman’in verdiği örnekte hatasız çalışıyor.

Bu kısım i == j ile eş değer gibi duruyor, ne dersiniz?

4 Beğeni

e çok iii derim hocam :slight_smile:

1 Beğeni