Çekirge PYTHON Öğrenmek İstiyor

Merhaba hobi olarak öğrenmeye yeni başladım. Daha yolun en başındayım. Aşağıda yazdığım kodda False oluşumu hangi if bloğu durumundan kaynaklanıyorsa o durumun mesajını yazdırmayı başardım fakat count fonksiyonu for döngüsünden dolayı saydığı her aynı harf için doğal olarak print mesajı basıyor. Bu yapıda şifrenin içinde aynı karakterden kaç tane olursa olsun 1 mesaj yazdırmanın yolu var mıdır. Şifre içinde aynı harfin 2 kez yazılmamasının istenmesi pek olası değil ama ben sadece öğrendiğim konularla bu yapılabilir mi diye merak ediyorum. Öğrendiğim kadar konu ile ben beceremedim en azından. Teşekkür ederim.

sifre = input("Sifrenizi Giriniz: ")
kontrol = True
for i in sifre:
    if sifre.count(i) > 1:
        kontrol = False
        print("Parolanızda aynı harfi bir kez kullanabilirsiniz!")
       
    elif len(sifre) < 7:
        kontrol = False
        print("Parola en az 7 karakterden olusmalidir.")
        break
if kontrol:
    print("Giris Kabul Edildi")

Şifre içerisindeki karakterleri bir dict içerisine atabilirsin. Her karakter bir defa içeriye girdiği için for döngüsünün elemanları sadece bir defa aynı karakter değerine sahip olacaktır.
Bu şekilde yalnızca bir defa print bastıracak.

Yanıtınız icin tesekkur ederım. Sozluk konusunu okumustum tekrar ınceleyıp gosterdıgınız yoldan yuruyecegım bakalım nereye cıkacak.

print'in en fazla 1 kere calismasini istiyorsak n kere calisan for loop’unun icinden cikartmamiz lazim.

Nereye? Mesela:

if kontrol:
    print("Giris kabul edildi")
else:
    print("Parolanizda ayni karakteri bir kez kullanabilirsiniz!")

7 karakter durumunun duzeltilmesini de egzersik olarak birakiyorum.
(Bu arada o kontrol de n kere yapiliyor.)

1 Beğeni

Aklıma bir şey takıldığı için sormak istiyorum. “kontrol = True” değişkenini while döngüsünde de gördüm. Bu değişkenin buradaki özelliği nedir?

Yani gördüğüm kadarıyla ne “for” ile bağlantısı var, ne de başka bir yerle. Kendi kendisine öyle duruyorken ne oluyor da if bloğunda “false” olması bir şeye yarıyor :slight_smile:
Esasen bu kontrol değişkenlerinin kullanımını kavrayamadım tam olarak. Anlatabilen olursa sevinirim.

Degiskenlerin hic bir yerde hic bir ozellikleri yok. Kullanildiklari kadariyla, kullandildiklari sekilde varlar.

if blogunda False olmasinin bir ise yaramasi, if'in yanindaki degerin True mu False mu olduguna gore bakip is yapmasindan kaynaklaniyor.

Baska bir deyisle if'in yanindaki sey if ona baktigi icin onemli. Bunun degiskenlerle veya kontrol ismiyle bir alakasi yok.

2 Beğeni

O halde bu kod satırında “kontrol = True” derken, öncelikli olarak kontrolü true tutup for işlemine geç ancak for işleminde yanlışlık olursa devam etme, kontrol false olsun mu denmek istenmiş?

Yani bu tür bool değerler, kendisinden sonraki işleme geçiş yapmak için referans mı alınıyor kısacası?

Sn.aib yanıtınız için teşekkür ederim. Kodun ilk halinde sadece bir karakterin birden fazla gectiği durumları kontrol ettirip sonucu tamda sizin belirttiğiniz gibi çözmüştüm. Sorun kodu kıt bilgimle biraz daha geliştirmek için 2. bir if bloğunda da girilen parolanın uzunluğunu kontrol ettirmek istediğimde çıktı. Hangi durumdan dolayı false olduğu mesajını ayrı ayrı veremedim Else blogundan sonra, bu yüzden ıf bloklarının içinde çözebilirmiyim yoluna gittim.

Sn Frequenter oluşturduğum sözlüğün value değerini atadığım karakter değişkenindeki elemanları saydıramıyorum hatam nerede acaba. Teşekkürler

user = input("Kullanici adiniz: ")
password = input("sifre: ")

entry = {user: password}
karakter = entry.values()

kontrol = True

for i in karakter:
    if karakter.count(i) > 1:
        kontrol = False
        print("Parolanızda aynı harfi bir kez kullanabilirsiniz!")
        break
    elif len(password) < 7:
        kontrol = False
        print("Parola en az 7 karakterden olusmalidir.")
        break
if kontrol:
    print("Giris Kabul Edildi")

dict yerine set mi demeye çalıştınız acaba? dict ile de yapılabilir tabii ki ama value’ler ne işe yarayacak?

Evet hata bende dict ile işimiz yok kümeler ile çalışmamız gerekiyor.
Dict ile yapsaydık tüm value değerleri 0’a atanabilir.
Eğer eşleşen değer varsa arttirabiliriz.
Sonuc olarak herhangi bir değer birden fazla kez kullanıldıysa hata verdirebiliriz.
Fakat gerek yok kümeler ile basit bir işlem hâline dönecektir.

Sn.aib ben bu sekilde cozebildim. Else blogu ile 2 farkli print almayi beceremedim. Cozumunuzu paylasirsaniz memnun olurum. Cok tesekkurler.

password = input("parola: ")

kontrol = True

for i in password:
    if password.count(i) > 1:
        kontrol = False
        print('Parola da aynı harfi bir kez kullanabilirsiniz!')
        break
    elif len(password) < 7:
        kontrol = False
        print("Parola en az 7 karakterden olusmalidir.")
        break
if kontrol:
    print("Giris Kabul Edildi")

Ben henuz o konulara cok uzagim :grinning: if elif ve else bloklari ile kendi urettigim cozumu paylastim. bu bloklar ile farkli ve daha kisa bir kod yazilabiliyorsa paylasirsaniz sevinir ogrenmis olurum. Ilginiz icin tekrar tesekkurler.

Bu da olur.

len kontrolunu for disina almak da olur. Hatta kontrol'u False yaptiysa for'a girmeye de gerek yok.