While döngüsü sorunu

import time
import random
saniye = 0
kelimeler=['ali','veli','deli']
doğru=0
yanlış=0
def aw():
	global kelimeler
	a2 = input('Listeye eklemek istediğiniz kelimeyi girin\n')
	kelimeler.append(a2)
	print('Kelime eklendi')
	manuel()
def manuel():
	global kelimeler
	a3= input('Başka kelime eklemek istiyor musunuz (Y/N)\n')
	if a3.upper == 'Y':
		aw()
	else:
		interface()

def interface():
	global kelimeler
	print('''
	Manuel kelime eklemek [1]
	Oyuna başlamak [2]
	Kelime listesini görüntülemek [3]
	Bitir [4]''')
	i = int(input(''))
	if i == 1:
		aw()
	elif i==2:
		program()
	elif i==3:
		print(kelimeler)
		interface()
	elif i==4:
		print('')
def program():
	global kelimeler, doğru,yanlış,saniye
	while True:
		time.sleep(1)
		saniye+=1
	while True:
		a5 = random.choice(kelimeler)
		print(a5)
		a4 = input('')
		if a4 == a5:
			doğru+=1
		elif a4!= a5:
			yanlış += 1
		if saniye == 60:
			print('Süre doldu\nDoğru cevap sayınız {}\nYanlış cevap sayınız {}'.format(doğru,yanlış))
			interface()
interface()

Program fonksiyonunda 2. While döngüsü çalışırken 60 saniyelik bir sayacın da aynı anda çalışmasını nasıl sağlayabilirim ?
İkinci while döngüsü:

while True:
		a5 = random.choice(kelimeler)
		print(a5)
		a4 = input('')
		if a4 == a5:
			doğru+=1
		elif a4!= a5:
			yanlış += 1
		if saniye == 60:
			print('Süre doldu\nDoğru cevap sayınız {}\nYanlış cevap sayınız {}'.format(doğru,yanlış))
			interface()

Thread kullanarak. Lakin bu 60 saniye sonunda ilk thread’le etkilesmesini isteyeceksin sanirim. Thread’ler arasi etkilesim basli basina bir kitap konusu ama bir fikir edinmek icin ayni moduldeki diger siniflara bakabilirsin.

Her halukarda yarida durdurulabilen bir input fonksiyonu lazim.

Yarida durdurulabilen bir input fonksiyonu bulmusken veya ariyorken sayaclarla filan ugrasmayip n saniyede giris yapilmazsa timeout eden bir input bulmak daha kolay olabilir.

2 Beğeni

Programlamaya ilk başladığım sıralarda ben de buna benzer bir soruyu merak etmiştim. İncelemek isteyebilirsin.

https://forum.yazbel.com/t/kullaniciya-sifreyi-girebilmesi-icin-10-saniye-tanima/

1 Beğeni

Bazı IDE’lerde çalışmayabilir. Timeout olursa devam edebilmek için kullanıcının enter’a basması lazım:

from threading import Thread
import builtins

def input(prompt: str = "", timeout: float = -1) -> str:
    if timeout < 0:
        return builtins.input(prompt)
    else:
        def create_prompter(prompt):
            def prompter():
                prompter.result = input(prompt)
            prompter.result = None
            return prompter
        prompter = create_prompter(prompt)
        thread = Thread(target = prompter, daemon = True)
        thread.start()
        thread.join(timeout)
        
        if prompter.result == None:
            print()
            raise TimeoutError()
        return prompter.result


try:
    name = input("Name: ", timeout = 5)
except TimeoutError:
    print("Timeouted")
else:
    print("Hi", name)
2 Beğeni