While ve for döngülerini iç içe kullanma

Merhaba abilerim ve kardeşlerim,
Yazbel dersleri üzerine çalışırken bir yandanda kod yazıyorum ki daha pekişsin diye yine kod yazarken bir yerde takıldım ve size sormak istedim.Sorum şu:

turkce_karakterler = "şüöİğıçŞÜÖĞIÇ"
while True:
    a = 0
    metin = input("Metninizi giriniz :")
    for i in turkce_karakterler:
        if i in metin:
            print("Lütfen türkçe karakter kullanmayınız !!!")
            a = 1
            break
    if a == 1:
        continue
    else:
        break

bu kodu hiç “a” değişkenini kullanmadan yazmak mümkün müdür? Bana fazlalık gibi geldi ama bir yol bulamadım.
Şimdiden cevaplarınız için teşekkür ederim :slight_smile: :slight_smile:
Not: kodu birazcık değiştirdim ama içinde hala bir “a” değişkeni mevcut.

while True :

demen yeterli , bu seni a değişkeni tanımlamakdan kurtarır :slight_smile:

Cevabınız için teşekkür ederim fakat while True dediğimde sonsuz döngüye giriyor
ve diğer yazdığım kodunda hatalı olduğunu fark ettim :thinking::blush:

Sonsuz döngüye girmemesi için ben de sizin gibi ya bir değişken tanımlıyorum yada bool bir ifade tanımlıyorum ornek olarak

a=bool(True)
while a==True:

yada

while a :

fakat donguden cıkmak ıcın break komutu donguyu tekrarlamak ıcın continue kodunu kullanmalısın bolece break ıle donguden cıkıp bır alt satırdakı kodu calıstırır

Cevabınız için çok teşekkür ederim :blush::blush:

turkce_karakterler = "şüöİğıçŞÜÖĞIÇ"
l = list(turkce_karakterler)
while True:
    metin = input("Metninizi giriniz :")
    ml = list(metin)
    if set(l)&set(ml):
        print('Türkçe karakter kullanmayın')
        continue
    break
2 Likes

Cevabınız için çok teşekkür ederim.
set(I)&set(ml):
Olan bölümü sanırım ileriki derslerde göreceğim. Şimdilik üzümünü yiyeyim bağını sormayayım :slight_smile: :blush:

Dilde goto statement’i varsa bu is icin bicilmis kaftan.

Yoksa, kimi dillerde break 2 veya break-ama-goto-degil label gibi bir statement oluyor, n tane loop’tan cikan veya belirtilen loop sonu label’ina cikan.

O da yoksa loop’lari fonksiyona alip return etmek en mantiklisi.

Son tercih her loop’a cikmayalim && gibi bir condition eklemek; bana da fazlalik gibi geliyor.

1 Like

Bu arada bu ornekteki durumun ideal cozumu de Turkce karakter kontrolunu kendi fonksiyonuna almak:

metin = input...
if turkce_karakter_var(metin):
    ...
1 Like

Cevabınız için çok teşekkür ederim sanırım python da goto statement’ı yok.Return etmek fonksiyonlar bölümünde ve maalesef daha oraya gelemedim şimdilik bununla yetinsem bir sıkıntı olmaz umarım, ama bu konu ile ilgili araştırma yaparken iç içe döngüler(Nested Loop) adlı bir ki konuya merak saldım. :slightly_smiling_face::blush:

Merhabalar,
Tam da sizin durumunuza uygun, döngülerle beraber kullanılan “else” deyimi var. Nasıl ki if deyiminin ardına else yazabiliyoruz, Python bize for ve while döngülerinin ardına da else yazabilme olanağı sunuyor. Eğer for/while döngüsü normal şekilde, yani break olmaksızın sonlandıysa, else deyiminin belirttiği kod çalışıyor. Ama döngü break ile sonlandıysa else kısmındaki kod çalışmıyor.

Örnek:

sayilar = (13, -5, 77, 43, 41, 25, -9)
for sayi in sayilar:
    if sayi % 2 == 0:
        print("Dikkat dikkat: çift sayıya rastlandı, döngü terk ediliyor!")
        break
else: # girinti düzeyine dikkat, for ile aynı hizadalar
    print("Yaşasıın, hiçbir çift sayıya rastlamadık, herkes tek!")

Sizin kodunuz da dolayısıyla a değişkenine ihtiyaç duymadan şöyle yazılabilir:

turkce_karakterler = "şüöİğıçŞÜÖĞIÇ"
while True:
    metin = input("Metninizi giriniz: ")
    for i in turkce_karakterler:
        if i in metin:
            print("Lütfen türkçe karakter kullanmayınız!!!")
            break
    else:
        print("Hiçbir türkçe karakter kullanmadınız, teşekkürler!")
        break # bu break while döngüsünden çıkarır

Not: Bu şekilde kullanılan “else:” deyimini “nobreak:” şeklinde de düşünebiliriz.

1 Like

Cevabınız için çok teşekkür ederim ben de buna benzer bir yolla yazmıştım kodumu fakat bu daha sade o yüzden bunu kullanacağım :blush::blush: