2016-08-02 31 views
0

Ich habe zwei Funktionen und die erste ruft die zweite. Wenn ich jedoch aus der zweiten Funktion ausbricht, zeigt es Text von einer if-Anweisung in der ersten Funktion an. Was ich nicht verstehe, ist warum die zweite Funktion die erste aufruft? Zweitens verstehe ich nicht, warum Code aus einer if-Anweisung ausgeführt würde, wenn die Bedingung nie erfüllt wurde.Warum ruft meine Pause die vorherige Funktion

#! /usr/bin/env python 

'''A sorting app where the user gets to choose 

between options and the options are ranked by 

likes in a file stored on a file''' 

import sys 
import random 
import pickle 

def intro(): 
    greeting = '''\nWelcome to chooser where your voice gets to be heard 

Press Enter to begin greatness 
Press anything else to be immediately banned 
>>''' 
    enter = raw_input(greeting).lower() 
    if enter == '': 
     main() 
    if enter == 'admin': 
     print 'Entering Admin menu\n' 
     admin() 
    else: 
     print '''\nDid you think I was kidding?! 
You're gone!\n''' 
     sys.exit() 
# Enters the main program if the user presses Enter or else it quits 
def main(): 
    count = 0 
    while True: 
     nav = '''Type Go to play 
Type Q to quit 
Type admin to go to admin 
>>''' 
     start = raw_input(nav).lower() 
     if start == 'q': 
      print '\nThank you for playing\nBye!\n' 
      break 
     else: 
      print 'Any other key restarts the function' 
def chooser(): 
    pass 
if __name__ == '__main__': 
    intro() 

'''       -----Questions----- 
Why does this function when it expires run the intro function instead of just 
running out of scope????''' 

Dies ist, was aus dem Terminal druckt:

terminal output

+0

Können Sie genauer sein, was passiert? Vielleicht kopieren Sie eine Terminalsitzung, in der Sie dieses Skript ausgeführt haben, und sehen Sie ein unerwartetes Verhalten. – user2357112

+0

@ user2357112 Ich postete ein Bild von dem, wie der Terminalausgang aussah, leider bin ich nicht an meinem Computer, aber ich bearbeite die Frage mit einem richtigen Screenshot in ein wenig – Codezilla

+0

kann hier nicht reproduzieren. Scheint normal zu funktionieren. Getestet mit Python 2 und Python 3 (mit Eingabe anstelle von raw_input und fixed prints); Drücken Sie die Eingabetaste drücken etwas anderes werden sofort verboten >> Typ Q beenden >> q Vielen Dank für das Spielen Bye zu starten! –

Antwort

1

grundsätzlich an dem Teil:

if enter == '': 
    main() 
if enter == 'admin': 
    print 'Entering Admin menu\n' 
    admin() 
else: 
    print '''\nDid you think I was kidding?! 

Sie haben zwei seperete Aussagen, ein 'wenn' und ein " if-else 'folgt ihm. Die erste prüft, ob die Eingabe '' ist, diese Bedingung gilt in Ihrem Beispiel, also wird main() aufgerufen und alles ist in Ordnung. Wenn main() zurückkehrt, verlassen Sie die erste Anweisung und geben Sie die zweite ein, die prüft, ob die Eingabe admin ist (das ist falsch), und wenn nicht, druckt sie.

die Logik hier ist:

  • wenn geben wird '', laufen main().
  • Wenn enter 'admin' ist, starte admin().
  • Wenn enter nicht 'admin' ist, drucken Sie die Nachricht aus.

der else Teil ist überhaupt nicht auf die erste if (nur auf die zweite) bezogen. was Sie tun müssen, ist die zweite ‚wenn‘ mit einem ‚Elif‘ zu ersetzen, so dass eine einzelne ‚if-elif-else‘ Aussage, so wird die Logik sein:

  • wenn eingeben ‚‘ ist, führe main() aus.
  • Wenn die Eingabe nicht '' ist, und geben Sie 'admin' ein, führen Sie admin() aus.
  • Wenn enter nicht '' ist und nicht 'admin', drucken Sie die Nachricht.