belirlenen yere geri dönmek

Başlatan marslı, 03 Aralık 2016 - 16:26:04

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

marslı

merhaba arkadaşlar.
if ile evet-hayır sorusu yapmaya çalışıyorum. ama bir yerde takıldım.
diyelimki evt-hayır şeklinde 4 soru sordum. birince soru evet ikinci soru evet ve üçüncü soru hayır. hayır dedikten snra gerekli komutlar çalışacak ve ikinci soruyu tekrar soracak. while kullanmadan bunu nasıl yapabilirim?

GokturkEnez

return ve goto komutlarını inceleyebilirsiniz.

ShangriLa

#2
while neden kullanmıyorsun? goto genelde pek pratik bir uygulama değil.
Ubuntu Mate Trusty

marslı

@GokturkEnez return ile denedim olmadı
@ShangriLa while ile çok karışık oluyor. ben raw_input değerine dönsün istorum. 

tlg

While ile en başa döner sanırım ama sizin istediğinize tam uymaz herhalde. Belirli bir ayırt edici nokta var mı? Mesela üçüncü soruda "hayır" cevabını aldıktan sonra illa ikinci soruya mı dönecek? Bunu siz mi belirleyeceksiniz?

marslı

Yapmak istediğim şey şu.  Masaüstünde dosya.txt dosyamız olsun. 
soru: masaüstünde dosya.txt dosyası var mı? [e-h]
evetse ikinci soru gelsin. hayırsa txt dosyasını oluşturup ikinci soruya geçsin. bu evet hayırları if ile yapıyorum.
print "dosya var mı?"
aa = input("cevabınız: ")
if aa in ["E"]:
print "bilmem ne"
if aa in ["H"]:
print "bilmem 2. ne"
aa değişkenine soruyla birlikte geri dönse mükemmel olur. 
ms-dosta mesela bir alan belirliyorsun, o alanı yazdığında oraya tekrar geliyor.
ahmet:
echo "XX"
rm ahmet.txt

ahmet
şeklinde.

tlg

En basit aklıma gelen, fonksiyonları kullanmanız. Soruların evet veya hayır durumuna göre işlemleri halleden fonksiyonlarınız olsun ve bu fonksiyonlardan geriye sizin "belirleyici" bir değişkeniniz dönsün. Bu değişkende diğer sorularınızın kontrol işini kolaylaştıracaktır. Yalnız sadece if değil elif de olmalı, ilk if ile kontrol sağlanırsa direkt olarak elif kısmı atlanıp diğer sorulara geçer. if ile sağlanmazsa elif kontrol eder ve diğer sorulara geçer. Yok ben elif sağlanmazsa bir üstteki if kısmına dönmek istiyorum derseniz, while gibi döngüler kullanmak lazım.

def func_1(foo):
    ...
    foo = "..."
    return foo #burası belirleyici yer

def func_2 (foo):
    ...
    foo = "..."
    return foo #burası belirleyici yer

print "Dosya var mı?
foo = input("Cevap: ")

if foo = "E":
    func_1(foo)
elif foo = "H":
    func_2(foo)

... # Diğer sorulara buradan devam

marslı

#7
Bu şekilde hiç olmuyor. Birinci def kısmından ikinci def'i çağırdığıımda bulunmadı şeklinde hata alıyorum.
Alıntı YapTraceback (most recent call last):
  File "/home/marsli/Masaüstü/ps/lss.py", line 35, in <module>
    lss1()
  File "/home/marsli/Masaüstü/ps/lss.py", line 27, in alin1
    lss2()
NameError: global name 'lss2' is not defined
en alttan yada ortaki def'ten bir sonrakini çağırdığım durumlarda hep hata verir bu

okkangal

Alıntı yapılan: GokturkEnez - 04 Aralık 2016 - 11:04:16
return ve goto komutlarını inceleyebilirsiniz.

python da goto  deyimi yoktur ... return de fonksiyonların döndüreceği değeri belirleyen deyimdir....


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 15 Ocak 2017 - 15:40:07


def goto(linenum):
    global line
    line = linenum

line = 1
while True:
    if line == 1:
        response = raw_input("yes or no? ")
        if response == "yes":
            goto(2)
        elif response == "no":
            goto(3)
        else:
            goto(100)
    elif line == 2:
        print "Thank you for the yes!"
        goto(20)
    elif line == 3:
        print "Thank you for the no!"
        goto(20)
    elif line == 20:
        break
    elif line == 100:
        print "You're annoying me - answer the question!"
        goto(1)



Bu şekilde bir yapı ile çözebilirsin belki ...  Fikir verebilmesi amacı ile ....