Şifre belirlerken küçük harf büyük harf duyarlılığı nasıl sağlanır

basit, düzgün veya okunabilirliği ön planda tutma amacı taşıyan, en azından bu konu için daha basit çözümler herzaman daha yararlı olacaktır. Sn @dildeolupbiten bir konuda kiss prensibi adlı güzel bir paylaşım yapmıştı okumanızı öneririm. Veya python interpreter’da import this kodunu çalıştırmanızı öneririm.
Sadece fikir vermek açısından… :slight_smile:

2 Beğeni
def solution(text):
    answer = 0
    for i in text:
        if i.isnumeric():
            answer |= 1 << 0
        elif i.isupper():
            answer |= 1 << 1
        elif i.islower():
            answer |= 1 << 2
    return answer == 0b111
4 Beğeni

Merhaba,

Haklısınız, değilmiş.

Açıkçası dün gece uppercase karakterlere vs. bakmadan cevap verince bu hatayı yapmışım. Teşekkürler. Yukarıdaki kodu editledim.

Ama zannederim algoritmanın mantığını anlamışsınızdır.

İyi forumlar :slight_smile:

1 Beğeni

Yönlendirmeniz için teşekkür ederim. Kod yazmadan kod yazmayı öğrenmek istiyormuşum gibi hissettim bir an :roll_eyes: ama henüz acemiyim yavaş yavaş sizlerin uyarılarıyla inşallah yazılımcı gibi düşünebilme yetisi kazanırım.

Forumda kiss prensibi diye arattım ama sadece bu mesajınızı sonuç olarak gösterdi konuyu hatırlıyorsanız link atabilirseniz okumak isterim. Teşekkürler.

@Cihat_Altiparmak koddaki mantığı gayet iyi anladım sadece

if(can1 and can2):
			return True

Parolamız Ankara1968 olarak TRUE değer döndürmesi gerekiyor diyelim.
döngüye girdi ve ilk if bloğunda tüm harfler küçük olmadığı için can1 False olarak kaldı ve elif bloğuna geçti aynı durum bu seferde can2’nin başına geldi tüm harfler büyük olmadığı için can2 de false olarak kaldı. Ve benim öğrendiğim kıt bilgimle can1 ve can 2 false olduğunda sonuç false olmaz mı.
Yani

if(can1 and can2):

kodu can1 ve can2 kodu True ise demek değil mi. Yani ikiside False aslında nasıl return True döndürüyor.

En iyi kod, en kısa kod :smiley: İyiymiş

Bak şimdi Oğuz,

Benim yaptığım şu:

for döngüsü ile, verilen şifrenin karakterlerini teker teker inceliyorum.

İncelediğim her bir karakter için if yapıları ile sorgulama yapıyorum.

  1. if : incelenen karakter küçük ise can1 True olur. Alttaki elif yapısı ve içerisindekiler sorgulanmaz.
  2. elif : incelenen karakter küçük değil ise bu sefer de aynı karakterin büyük olup olmadığını sorguluyorum. Eğer verilen karakter büyük ise bu sefer can2 True olur.

Kısaca
can1 : verilen şifrede küçük harf olup olmadığını belirlemek için

can2 : verilen şifrede büyük harf olup olmadığını bulmak için

Kodu anlayamıyorsan şunu bi çalıştır bakalım. Muhtemelen anlayacaksındır.

def control(x):
	can1 = False # flag
	can2 = False # flag
	for i in x:
		if(i.islower()):
			can1 = True
			print(i, "karakteri kücük karakterdir")
		elif(i.isupper()):
			can2 = True
			print (i, "karakteri buyuk karakterdir")
		else:
			print(i, "karakteri ne buyuk karakterdir ne de kucuk karakterdir")
			
		# yukaridaki if , eliflerle
		# isimiz bitti
		# simdi asagidaki 
		# sarti kontrol ediyorum	
		if(can1 and can2):
			return True
	return False

a = input()
print(control(a))

Yazdıklarınızın hepsini yazdığınız şekilde anlamıştım lakin

if(can1 and can2):
			return True

şartı kontrol ettirdiğiniz kodun bu kismindaki durumu yorumlarken aklım nereye gittiyse saçmalamışım. Kusura bakmayın. Sabırla izahat yazdığınız için ayrıca teşekkürler.

1 Beğeni

Sn @aib, sn @Muallim nin alternatif olarak gösterdiği yolu kullanarak böyle bir çözüm geliştirdim ama sizin söylediğiniz gibi kütüphane metodlarına yine başvurmuş oldum. Tüm alfabeyi küçük harf ayrı, büyük harf ayrı yazıp döngüye sokmaktan başka aklıma metod kullanmadan çözüm üretmek gelmiyor. Tüm alfabeyi küçük harf ve büyük harf olarak yazıp parolada olup olmadığını sorgulatmakta bana iyi bir çözüm olarak da gelmedi. Söylediğiniz şekilde bir çözüm zahmet olmazsa yazarsanız çok makbule geçecek yoksa sürmenaj olucam. İlginiz için tekrar teşekkürler.


def setpass():


    while True:
        upper_letterCount = 0
        lower_letterCount = 0
        numeric_charCount = 0
        password = input("Set User Password : ")
        if password == "":
            print('Exit by user')
            break
        if len(password) < 7:
            print("Your password must be at least 7 characters")
            continue
        for char in password:
            if char.islower():
                lower_letterCount += 1
            if char.isupper():
                upper_letterCount += 1
            if char.isnumeric():
                numeric_charCount += 1
        if (lower_letterCount > 0) and (upper_letterCount > 0) and (numeric_charCount > 0):
            print(f"Your password : {password} has been accepted ")
            break
        elif lower_letterCount == 0:
            print("Your password must contain at least one lowercase letter")
        elif upper_letterCount == 0:
            print("Your password must contain at least one uppercase letter")
        elif numeric_charCount == 0:
            print("Your password must contain at least one number")
    return password


setpass()
1 Beğeni
 şifre = str(input('şifre : '))
 deneme = şifre.capitalize()
 if(şifre = deneme): 
     print('şifreyi oluşturdunuz')
 else:
     print('tekrar deneyin')

hmm peki şöyle yapsanız mesela diyelim ki siz şifre programınızın verilen şifrenin ilk harfi büyük değilse o şifreyi kabul etmemesini istiyorsunuz bu çok basit şifrenin ilk harfini büyütürsünüz ve eğer eski şifre o şifre nin aynısı ise kabul edip değil ise kabul etmez

@hackaxx Merhaba olabilir tabi ki ama ben genelde kullandığım uygulamalarda karşıma çıkan durumlara göre çözümler nasıl yapılıyormuş diye merak ettiğim için basitlikten ziyade çetrefilli konular oluyor mesela bir çok uygulamanın ve sitenin parola belirleme algoritmasında mükerrer yada sıralı rakamların kullanılması durumunda parola kabul edilmiyor. Şu an onu araştırıyorum nasıl yapılmıştır diye muhtemelen işin içinden çıkamıycam ve konu açacağım :grinning:

Dogru kutuphane metodlarini kullanmakta bir sorun yok. Bir karakterin kucuk harf olup olmadigi sorgulanmak istenmis ve islower da tam olarak bunu yapiyor.

kusura bakmayın ben islower filan bilmiyorum aslında pythonın 100de 1ini bile bilmiyorum.bu nedenle sadece bildiklerimi kullanarak çözüm bulmak konusunda ustalaştım. programlamada cehalet evdeki yangın olsa ben içerde yanardım maalesef :worried: :sob: :disappointed_relieved: :sweat: :weary: :tired_face:

Tam olarak anlaşılır söyler misin?

if password.lower() != password != password.upper():
    print("hem küçük hem büyük harf var")
3 Beğeni

Şifre belirlerken numeric karakterler kullanılmayacaksa ve hata mesajlarında hatanın nedeni yazılmayacaksa en kısa yöntem bu oldu.Elinize sağlık

Nümeriklerde de çalışmaz mı?

@Then_Shiffman Yani numeric sorgulamıyorsanız çalışıyor tabi ki. Ama password numeric içeriyor mu diye aynı satırda kodun devamında denemeler yaptım ama doğru sonuç vermedi yada hata verdi.