2016-03-25 21 views
0

Toplam python noob ve "0" girdiğimde programımın neden bitmediğini anlamaya çalışıyorum. Sadece tekrar menüden başlar.Python programı bitmiyor

def menu(): 
    print('\n\n\n\n') 
    print('List Processing Program Menu') 
    print('0 to exit') 
    print('1 to view data') 
    print('2 to append data') 

    while(1): 
     try: 
      choice = -1 
      while(choice < 0 or choice > 2): 
       choice = int(input('Please enter a valid number choice ')) 
      break 
     except ValueError: 
      print('Enter an integer number for your menu selection') 
     return choice 

def main(): 
    while(1): 
     choice = menu() 
     if(choice == 0): 
      break 
main() 
+4

'return' deyiminiz, onu elde etmeden önce 'bozuldu'' while' döngüsünün içindeyken 'menu''den hiçbir zaman döndürülmez. Bu yüzden, 'ana' inizin içindeki seçim daima 'Yok' dır. Eğer 'return' deyimini iptal ederseniz, bu beklediğiniz gibi çalışacaktır. – Suever

cevap

0

Sağ while (choice < 0 or choice > 2): döngü sonra break söylüyorsun ama return choicewhile(1) döngünün içindedir. Bu, işlevinizin, choice değil, None geri dönüşüyle ​​gerçekleşeceği anlamına gelir. Sadece return choice satırını girintilemeye ihtiyacınız var.

1
while(choice < 0 or choice > 2): 
    choice = int(input('Please enter a valid number choice ')) 
    break 

Sorununuz burada. while döngü üzerinden kırılır ve None her döndürülür (her Python işlevi sonunda None örtülü return vardır). aşağıdaki gibi

Kodunuza temizlemek edebilirsiniz: return beyanı sizin while döngü içinde olduğundan

def menu(): 
    print('\n\n\n\n') 
    print('List Processing Program Menu') 
    print('0 to exit') 
    print('1 to view data') 
    print('2 to append data') 

    choice = None 
    while choice not in [0, 1, 2]: 
     try: 
      choice = int(input('Please enter a valid number choice ')) 
     except ValueError: 
      print('Enter an integer number for your menu selection') 
    return choice 
0

Sizin menu() işlev None döndürür Eğer break giriş geçerli olduğunda dışarı.

Unindent sizin return beyanı boyut kaydırma while ile veya daha iyisi, bu yüzden sadece return döngü içinde yerine break kullanarak. Bu sizin ilk döngü içindeyken olduğundan

0

Sen asla choice dönüyor. Döngünün dışında kaldığınızda, belirli bir dönüş olmadığı için None’ı döndürürsünüz.

ise döngünün dışında dönüşünü taşıyın veya böyle bir şey

: Burada iki seçenek var

sizin return beyanı while döngünün içine olduğu için hiçbir değer hiç menu döndürülür
try: 
     choice = -1 
     while(choice < 0 or choice > 2): 
      return int(input('Please enter a valid number choice ')) 
    except ValueError: 
     print('Enter an integer number for your menu selection') 
1

o Bunu elde etmeden önce break. Bu nedenle, main'un içinde, seçim her zaman None'dur.

beklediğiniz gibi de-girinti return deyimi bu işe olacaktır. Eğer özlü olmak istiyorsanız aslında nasıl olsa o yürütmek gerekiyor çünkü hiçbir zaman

def menu(): 
    print('\n\n\n\n') 
    print('List Processing Program Menu') 
    print('0 to exit') 
    print('1 to view data') 
    print('2 to append data') 

    while(1): 
     try: 
      choice = -1 
      while(choice < 0 or choice > 2): 
       choice = int(input('Please enter a valid number choice ')) 
      break 
     except ValueError: 
      print('Enter an integer number for your menu selection') 

    return choice 

def main(): 
    while(1): 
     choice = menu() 
     if(choice == 0): 
      break 
main() 

, kendi try/except tabloların tüm kaldırabilirsiniz.

def menu(): 
    choice = -1 
    while choice < 0 or choice > 2: 
     choice = int(input('Please enter a valid number choice')) 

    return choice 


def main(): 
    choice = -1 
    while choice != 0: 
     choice = menu()  
0

Seçimi okurken kesintiyi girmeniz gerekir, aksi takdirde menü işleviniz her zaman geri döner.

try: 
     choice = -1 
     while(choice < 0 or choice > 2): 
      choice = int(input('Please enter a valid number choice ')) 
      break 
    except ValueError: 
     print('Enter an integer number for your menu selection') 
İlgili konular