Kullaniciya sifreyi girebilmesi icin 10 saniye tanima

Aklima bir soru takildi.O da su.
Simdi ben kullaniciden sifre istiyorum.Ama kullanicinin bu sifreyi 10 saniye icinde girmesini istiyorum.Bu sarti nasil sağlayabilirim acaba?
Anlasilmasi acisindan bir ornek vereyim.

sifre = input("Lutfen 10 saniye icinde sifrenizi giriniz.")
if not sifre:
    print("Zamaniniz doldu,sifreyi giremediniz.Programdan cikiliyor...")
    quit()
elif sifre == "1234":
    print("Programa hosgeldiniz.")
else:
    print("Yanlis sifre girdiginiz icin programdan cikiliyor...")
    quit()
# Ama kullanici herhangi bir değer girmediği surece
# asağida yazmak istedigim if kosullarini 
# yurutemiyorum.Acaba bunu nasil yapabilirim?

Merhaba.

Şu iki modül işinizi görecektir:

İyi çalışmalar.

Yardimci oldugunuz icin tesekkur ederim.

1 Beğeni

O modülleri kullanmanız gerektiği doğru ama input kullanırken bir işe yaramaz diye biliyorum.

Peki sizin bir oneriniz var mi?Modullere de baktim biraz ama pek bir sey anladigimi soyleyemem.Yardimci olursaniz memnun kalirim.

Bir kod ornegi gonderebilirseniz bu kodlari(bi ihtimal)
kendi kafama gore ufak da olsa gelistirmek istiyorum.Boylece bu belirtilen fonksiyonlarin ,metotlarin calisma sistemini biraz da olsa anlama yolunda bir yer katedebilirim.(tabi katedebilirsem☺)

Merhaba, sorunuzun cevabı şu mesajda verilmiş. O mesajdaki kodlarda gerekli değişiklikleri yaptığınız taktirde (user.join(2) ifadesini user.join(10) şeklinde değiştirirseniz), kullanıcıya şifreyi girebilmesi için 10 saniye zaman tanırsınız.

1 Beğeni

Su anda kafama yatti.Ilgi gosterdiginiz icin hepinize tesekkur ederim.(Ilginiz yeter :blush:)

1 Beğeni

Burada ne demek istediğinizi anlayamadım; input kullanırken niye işe yaramasın?

İnput fonksiyonu sadece enter tuşu ile son bulmuyor mu?

Aslında, @hasser arkadaşımız bir yerde doğru söylüyor. input() fonksiyonu, bir iş parçacığının içeriğini oluşturmuyorsa, enter tuşuna basılırsa sonlanır. Ancak bu örnekte enter’a basmadan input()'un sonlanmasının nedeni, input()'un iş parçacığının bir parçası olması ve iş parçacığının daemon (kullanıcının doğrudan kontrolünde olmayan, arka planda çalışan programın) değerinin True olarak ayarlanmasıdır.
Normal bir iş parçacığının daemon değeri ön tanımlı olarak False’dur. Daemon’u False olan bir iş parçacığı da, başlatıldığı andan itibaren, bitene kadar sanal makinede çalışır. Yani iş parçacığını başlatmadan önce daemon True yapılırsa, iş parçacığı sonlandırılabilir.

Kaynak: 17.1. threading — Thread-based parallelism — Python 3.5.9 documentation
Yardımcı Kaynak: https://stackoverflow.com/questions/2213340/what-is-daemon-thread-in-java

daemon

A boolean value indicating whether this thread is a daemon thread (True) or not (False). This must be set before start() is called, otherwise RuntimeError is raised. Its initial value is inherited from the creating thread; the main thread is not a daemon thread and therefore all threads created in the main thread default to daemon = False.

The entire Python program exits when no alive non-daemon threads are left.

1 Beğeni

ben thread’leri daha yeni öğrendim, daha önce bu konuyu okuduğumda içimde kalmıştı ve neden yapamayım dedim. Benim çözümüm şöyle:

from threading import Thread
from time import sleep

def inr():
    global sleep
    a = input("10 saniye içinde parola girin: ")
    if a == "yazbel":
        print("Doğru parola")
        del sleep

th2 = Thread(target=inr)
def sure_olc():
    global th2
    sayac = 0
    try:
        while True:
            if not sayac > 10:
                sleep(1)
                sayac += 1
            else:
                print("\nSüre doldu!")
                del th2
                exit()
    except:
        pass

th1 = Thread(target=sure_olc)

th1.start(); th2.start()

Ne kadar uğraştım bilemezsiniz, daha çözemezsem delirirdim herhalde :smile:

1 Beğeni

Şöyle de yapabilirsin aslında @reo ,

from threading import Timer

cevap = None
sure_doldu_mu = False

def kontrol(): 
   global cevap, sure_doldu_mu
   sure_doldu_mu = True
   if cevap is None:
       print("cevap girilmedi")
       exit()

def cevap_bulundu_mu(veri): 
   global sure_doldu_mu
   if sure_doldu_mu:
       exit()  
   if veri == "yazbel":
       print("doğru cevap")
   else:
       print("yanlış cevap")

control_thread = Timer(5, kontrol)
control_thread.start()

cevap = input("şifre gir: ")
control_thread.cancel()
cevap_bulundu_mu(cevap)

Aslında bu algoritmayı açık olayım bir fantazi de ben yapayım diye yazdım.Biliyorum sorunlu bir algoritma, üstünkörü yazdım. En güzel algoritma stackoverflow daki linkte bence.Ama senin öğrenme çabanı cidden güzel buldum.Teşekkürler @reo , tebrikler olsun.

1 Beğeni

Sağol @Cihat_Altiparmak, sınavlardan vakit bulunca pythona daha fazla vakit ayıracağım. Sömestr bir gelsin, şu threadları en ince ayrıntısına kadar öğrenmeyi hedefliyorum nasipse. inr fonksiyonundaki del sleep’ten başka çözüm gelmemişti aklıma, kontrol değişkeni kullanmak daha mantıklıymış.

Aynen öyle.

Kolay gelsin :relaxed: