Python While ile soru

Bir cümle girin ve cümledeki en uzun karakteri while ile bulup yazdırın

arkadaşla böyle bir sorum var çözemedim yardımcı olacak varmı

En uzun karakterden kastınız nedir.

en uzun kelime kelime yani

Neden while? Split ile boşluklardan kelimeleri ayırabiliriz sonrada bir for döngüsü ile bu kelimelerin uzunluğunu bulup en yüksek olanın indexine göre ilk listeden kelimeye ulaşabiliriz.

1 Beğeni

Ben olsaydım böyle bir kod yazabilirdim.

import string

cumle = "Merhaba bu cümle en sondaki noktaya kadar gidiyor, haydi selametle."
kelimeler = "".join(cumle[i] for i in range(len(cumle)) if cumle[i] not in string.punctuation)
kelimelerin_uzunluklari = {j:len(j) for j in kelimeler.split(" ")}
liste = list(kelimelerin_uzunluklari.values())
liste.sort()
print(kelimelerin_uzunluklari)
print("En uzun kelime --->>>","".join(i for i,j in kelimelerin_uzunluklari.items() if j == liste[len(liste)-1]))
1 Beğeni

Neden özel karakter filtresi gibi bir şey eklediniz? Özel karakterler zaten 1 yada 2 tane ardışık gelebilir ki geldi diyelim bu filtredeki sırayla gelmez ise filtrelemez.

cumle = "En uzun kelimeyi bul"
print(max(cumle.split(),key=len))

Bu şekildede yapılabilir.

1 Beğeni

Daha çok noktalama işaretlerinden ötürü öyle bir filtreleme yaptım. Elbette yazım kurallarını baz alarak yazmadım. Örnek niteliği taşıması açısından doğru kullanılan virgül ve nokta gibi noktalama işaretlerini filtreledim.

Ardışık gelebiliyor olması evet sorun teşkil ediyor, fakat spesifik durumlar göz ardı edilerek yazıldığında kullanılabilir olduğunu düşündüğümden yazayım dedim.

Evet öyle de yapılabilir. Fakat yaptığım gibi bir filtreleme yapılmazsa virgülüde(ya da o an hangi noktalama işareti kullanıldıysa) hesaba katarak en uzun kelimeyi gösteriyor.

Anladım ama çok uzatmışsınız re modülü kullanılarak daha kolay yapılabilirdi.

Tabii ki. üzerine düşüldükçe daha da efektif olacak şekilde yazılabilir.

Noktalama işaretlerini yok sayarak

import re

cumle = "En uzun kelimeyi bul........."
print(max(re.findall('[a-zA-Z]+', cumle), key=len))

Adam neden while ile istedi acaba.

2 Beğeni

Merhaba.

Bunu aşağıdaki gibi yapabilirsiniz.

sentence = input("Cümle: ")
dictionary = {}
word = ''
length = 0
i = 0

while True:
    letter = sentence[i]
    # Mevcut harf, boşluk veya noktalama işareti mi kontrol edelim.
    if letter in (' ', ',', '.', '!', '?', ';', ':'):
        # Eğer boşluk veya noktalama işareti ise,
        # Bir önceki kelimeyi ve uzunluğunu kaydedelim.
        if length > 0:
            dictionary[word] = length
        word = ''
        length = 0
    else:
        # Eğer boşluk veya noktalama işareti değil ise,
        # Kelimeye o harfi ekleyelim.
        word += letter
        # Ek olarak uzunluğuna da 1 ekleyelim.
        length += 1
    # Indeks değerini 1 kadar arttıralım.
    i += 1
    # Cümlenin sonuna gelip gelmediğimizi kontrol edelim.
    if i == len(sentence):
        # Eğer cümlenin sonuna gelmişsek,
        # Elde ettiğimiz sözlükte bir sıralama yapalım.
        dictionary = dict(sorted(dictionary.items(), key=lambda x: x[1]))
        # key=lambda x: x[1], sıralamayı uzunluğa göre yapmamızı sağlar.
        # Sıralanmış sözlükteki son elemanı yazdıralım, "index = -1".
        key, value = list(dictionary.items())[-1]
        print(f"En uzun kelime, {key}: {value}")
        break

# Sıralanmış sözlüğü yazdırmak için,
# print(dictionary)

Sıralama olayı için de while döngüsünün kullanılması isteniyorsa eğer, “Bubble Sort” gibi algoritmaları kullanabilirsiniz.

İyi çalışmalar.

1 Beğeni