Merhaba arkadaşlar projemin ufak bir kısmında şu şekilde bir yardıma ihtiyacım var.
Elimizde uzun bir string olsun(‘Ali ata bak’) gibi mesela
Dışarıdan harf girişleri yapıcam yaptığım her harf girişinde bu string içerisinde var ise eğer bunu boş bir liste içerisine sıralı şekilde yerleştirecek…Örnek olarak önce b sonra t girdim ama liste içerisine anlamlı şekilde gelmesi için t,b şekilnde sıralanacak.Harf girişleri sonunda yukarıda belirttiğim uzun string oluşturulacak…
metin="ali ata bak"
yeni=[]
for i in range (0,len(metin)):
yeni.append('_')
don=True
while don:
harf=input("bir harf girin:")
for i in range (0,len(metin)):
if harf==metin[i]:
yeni[i]=harf
if metin==''.join(yeni):
don=False
print(yeni)
def iterate(f, x0):
yield x0
yield from iterate(f, f(x0))
def takewhilePlusOne(pred, xs):
for x in xs:
yield x
if not pred(x): break
def seq(*fs):
return list(fs)[-1]
ask = lambda prompt, target: list(takewhilePlusOne(lambda g: (seq(print(list(map(lambda c: c if c in g else '_', target))), not all(map(lambda c: c in g, target)))), iterate(lambda ii: ii + [input(prompt)], [])))
ask("bir harf girin: ", "ali ata bak")
Sevgili @aib, karmaşık ve ilginç yöntemler üretiyorsunuz. Sizin izlediğiniz yönteme göre oldukça basit kaçıyor ama ben mesela benzer bir sonuç üretmek için aşağıdaki yöntemi tercih ederdim.
def ask(prompt, string):
items = ["_"] * len(string)
while "".join(items) != string:
print(items)
letter = input(prompt)
if len(letter) == 1:
for i, j in enumerate(string):
if letter == j:
items[i] = j
print(items)
ask("bir harf girin: ", "ali ata bak")
Fonksiyonel programlama (ve ucundan lambda calculus) pratigi yapiyorum. Odev sorularina ve “benim icin x yaz” isteklerine bu sekilde cevap verme prensibim var (ama bi yandan yardim etmeye calisiyorum da)
Basit her zaman (cogunlukla) en iyisidir.
Bu da benim basit denemem:
def ask(prompt, target):
def print_status(target, guesses):
print(list(map(lambda l: l if l in guesses else "_", target)))
guesses = []
while True:
print_status(target, guesses)
done = all(map(lambda l: l in guesses, target))
if done: break
guesses += input(prompt)
ask("bir harf girin: ", "ali ata bak")