2016-12-09 5 views
1

Ich versuche, meine Funktion zu beenden, die Schleife, sobald es die Rückkehrklausel trifft, aber es nicht tut. Erklärungen, anstatt direkte Code-Bearbeitung wäre willkommen.Schleife beendet nicht, sobald Bedingungen erfüllt sind

def Menu(): 
    UserMenu = True 
    print (""" 
     U.Create a Username 
     E.Run Exponential Calculator 
     Q.Exit/Quit 
     """) 
    while UserMenu not in ("U", "E", "Q"): 
     print("\n Error: Choice must be U, E or Q") 
    return UserMenu 

# Function designed to retrieve first name only from fullname entry. 
def get_first_name(name): 
    first=[""] 
    i = 0 
    while i < len(name) and name[i] !=" ": 
     first += name[i] 
     i += 1 
    return name[:i] 

# Function designed to retrieve first initial of last name or first initial of first name if only one name input. 
def get_last_initial(name): 
    j = len(name) - 1 
    while j >= 0 and name[j] !=" ": 
     j-=1 
    return name[j+1] 


# Function that generates username based upon user input. 
def get_username(): 
    name = raw_input("Please enter your Full Name: ") 
    username = get_first_name(name) + get_last_initial(name) 
    return username.lower() 



# Function to generate exponential numbers based upon usser input. 
def print_exponential(): 
    base = int(raw_input("Please select a base number: \n")) 
    power = int(raw_input("Please select a power number: \n")) 
    exponential = 1 
    while power>0: 
     exponential = exponential * base 
     print base 
     if power >1: 
      print "*", 
     power = power -1 
    return "=%d" % exponential 

print Menu() 
while UserMenu != "Q": 
    if UserMenu is "U": 
     UserMenu = raw_input("Please enter your Full Name: ") 
     print "your username is %s" % get_username() 
    else: 
     print print_exponential() 
    print Menu() 

Dies ist das ganze Programm, hoffe es hilft!

+4

'UserMenu' wird nicht ewig gleich zu' ("U", "E", "Q") ', weil Sie setzen es als' UserMenu = true'. Sie müssen 'input' (python 3) oder' raw_input' (python 2) verwenden, damit jemand mit Ihrem Programm interagiert – roganjosh

+0

Ihre Bearbeitung hat das komplizierter gemacht. Was beabsichtigen Sie für 'print Menu()'? – roganjosh

+0

Wenn Sie einen Stringvergleich durchführen, verwenden Sie '==' statt 'is'. Sie sind anders. – Lafexlos

Antwort

3

Sie müssen den Wert von UserMenu innerhalb der Schleife aktualisieren, oder die Schleife eintritt, von Natur aus eine Endlosschleife sein:

def Menu(): 
    UserMenu = raw_input(""" 
     U.Create a Username 
     E.Run Exponential Calculator 
     Q.Exit/Quit 
     """) 
    while UserMenu not in ("U", "E", "Q"): 
     UserMenu = raw_input("\n Error: Please input only U, E or Q:") 
    return UserMenu 


... 
all your other functions 
... 

user_choice = Menu() 
while user_choice != "Q": 
    if user_choice == "U": 
     print "your username is %s" % get_username() 
    else: 
     print_exponential() 
    user_choice = Menu() 

Durch neue Eingabe in der Schleife bekommen, wird es in der Lage sein, die treffen Kriterien, die die Schleife steuert. Die Schleife, die Sie geschrieben haben, wird nur gedruckt, dann überprüfen Sie UserMenu erneut, ohne es zu ändern, so dass die Schleife nie beendet wird.

+1

Es wäre etwas besser, wenn Sie die Nachricht in der Schleife nicht kopieren kopiert. Aber deine Antwort ist immer noch falsch. –

+0

Whoops, vergessen, '! =' Zu 'nicht in' zu ändern, sollte der Code jetzt funktionieren. Der Punkt ist, dass die Steuerungsbedingung innerhalb der Schleife aktualisiert werden muss. – Will

+0

An diesem Punkt denke ich, es wäre gut, wenn Sie ein wenig erweitern könnten, was hier schief gelaufen ist. Das OP hatte 6 (glaube ich) Antworten, die alle das Ziel verfehlten. Tatsache ist, dass "Drucken" nur visuell ist, also müssen sie zur Eingabe auffordern. Auch wenn dies Python 2 ist, wird es sich nicht wie erwartet verhalten. – roganjosh

1

Verwaltet, um mein Problem mit dem folgenden Code zu sortieren.

def Menu(): 
    result = raw_input (""" 
     U.Create a Username 
     E.Run Exponential Calculator 
     Q.Exit/Quit 
     """).upper() 
    while result not in ("U", "E", "Q"): 
     print("\n Error: Please input only U, E or Q:") 
     result = raw_input (""" 
     U.Create a Username 
     E.Run Exponential Calculator 
     Q.Exit/Quit 
     """).upper() 
    return result 


# Function designed to retrieve first name only from fullname entry. 
def get_first_name(full_name): 
    i = 0 
    while i < len(full_name) and full_name[i] !=" ": 
     i += 1 
    return full_name[:i] 

# Function designed to retrieve first initial of last name or first initial of first name if only one name input. 
def get_last_initial(full_name): 
    j = len(full_name) - 1 
    while j >= 0 and full_name[j] !=" ": 
     j-=1 
    return full_name[j+1] 


# Function that generates username based upon user input. 
def get_username(): 
    username = get_first_name(full_name) + get_last_initial(full_name) 
    return username.lower() 



# Function to generate exponential numbers based upon user input. 
def print_exponential(): 
    base = int(raw_input("Please select a base number: \n")) 
    power = int(raw_input("Please select a power number: \n")) 
    exponential = 1 
    while power>0: 
     exponential = exponential * base 
     print base 
     if power >1: 
      print "*", 
     power = power -1 
    return "=%d" % exponential 

choice = Menu() 
while choice != "Q": 
    if choice == "U": 
     full_name = raw_input("Please enter your Full Name:") 
     print "your username is %s" % get_username() 
    else: 
     print print_exponential() 
    choice = Menu() 
Verwandte Themen