Napisałem kolejny prosty program, który nazywam moim podstawowym kalkulatorem "Python". Do tej pory znalazłem problem z niektórym kodem, który napisałem w Pythonie 3.3.2. Oto kod poniżej, abyś mógł go przeczytać, zanim stanowiłem mój problem ...

def startup_screen():
    user_input_1 = int(input("Please enter your first number.\n"))
    user_input_2 = int(input("Now please enter your second number.\n"))
    command_list()

def command_list():
    user_command = input("Now what would you like to do with these two numbers?\n").lower()

    if user_command == "add":
        calc_add()
    elif user_command == "subtract":
        calc_subtract()
    elif user_command == "multiply":
        calc_multiply()
    elif user_command == "divide":
        calc_divide
    else:
        print("Please try again.")
        user_command

def calc_add():
    add_result = (user_input_1+user_input_2)
    print(add_result)
    command_list()

def calc_subtract():
    subtract_result = (user_input_1-user_input_2)
    print(subtract_result)
    command_list()

def calc_multiply():
    multiply_result = (user_input_1*user_input_2)
    print(multiply_result)
    command_list()

def calc_divide():
    divide_result = (user_input_1/user_input_2)
    print(divide_result)
    command_list()

startup_screen()

Tutaj możesz zobaczyć, że zdefiniowałem startup_screen, który zbiera wprowadzanie użytkownika jako liczbę całkowitą, a następnie przechowuje go odpowiednio w user_1 i user_2. Następnie użytkownik jest podejmowany na ekranie głównym poleceń, gdzie można wybrać albo dodać, odjąć, pomnożyć lub podzielić obie numery. Polecenie jest następnie określane na wejściu użytkownika, więc jeśli użytkownik chce dodać dwie liczby, wpisują one "Dodaj" i są pobierane do funkcji Dodaj - jak zdefiniowano powyżej.

Jednak , w funkcji Dodaj, wejścia użytkownika_1 i użytkownika_2 nie są rozpoznawane, a także w innych programach ... więc powoduje błąd w programie w programie. Nie mam pojęcia, co robić. Czy mógłbyś mi pomóc?

Dziękuję Ci bardzo...

2
Jack Davis 21 listopad 2013, 22:07

3 odpowiedzi

Najlepsza odpowiedź

Spójrzmy na program programu z punktu widzenia funkcji {x0}}.

W pierwszej linii,

add_result = (user_input_1 + user_input_2)

Mówisz, weź wartość user_input_1 Dodaj go do user_input_2 i wykonaj to do zmiennej add_result. Dobra, to ma sens.

Teraz pozwala uzyskać pierwszą wartość user_input_1 ... pozwala zobaczyć, pierwsze miejsce do sprawdzenia jest "zakres lokalny". To jest funkcja, w której obecnie jestem.

def calc_add():
    add_result = (user_input_1 + user_input_2)
    print(add_result)

Dobra nie, nic tam ... Dobra, może to był jeden z parametrów wejściowych?

def calc_add():

Nie przekazano żadnych parametrów wejściowych do tej funkcji. Dobra, to musi być globalne ... ale czekać bzdury ... Żadne parametry globalne nigdy nie przeszkadzają! zwłaszcza nie user_input_1. Cóż, dang, mam dodać dwa parametry, ale jeden z parametrów nie istnieje! Nie można lepiej rzucić błąd!

Może gdyby programista minęł mi informacje, których potrzebowałem, będzie działać lepiej, może coś takiego:

def load_screen():
    user_1 = int(input("Please enter your first number.\n"))
    user_2 = int(input("Now please enter your second number.\n"))
    command_home( user_1, user_2) # Okay command_home I took 2 inputs! 
                                  # Here they are work your magic!



def command_home(in1, in2): # Hey I need 2 varaibles to work, Ill call them in1 and in2.
                            # so based on the way command_home( user_1, user_2) is called
                            # in1 = user_1, in2 = user_2 
    command = input("Now what would you like to do with these two numbers?\n").lower()
    if command == "add":
        calc_add(in1, in2) #Okay, now i need to add my two inputs,
                           # but calc_add is another function it wont be able to see MY
                           # in1, in2 ...  i better pass them over as parameters.
    elif command == "subtract":
        calc_subtract()
    elif command == "multiply":
        calc_multiply()
    elif command == "divide":
        calc_divide()



def calc_add(user_input_1,user_input_2 ): # Okay now i know where to look for user_input_1 
                                          # and user_input_2, they will be passed to me
                                          # when someone calls me! Now i can find my varables
                                          # and i wont throw an error!
    add_result = (user_input_1 + user_input_2)
    print(add_result)
0
gbtimmon 21 listopad 2013, 18:22

Podaj wejścia jako argumenty do następujących funkcji, wartości nie są zmiennymi globalnymi (niezwłocznie dostępne przez dowolną funkcję), jeśli są one zdefiniowane w funkcji.

def loadscreen():
    ...
    command_home(user_input_1,user_input_2)

def command_home(user_input_1,user_input_2):
    ...
    calc_add(user_input_1,user_input_2)

def calc_add(user_input_1,user_input_2)
    add_result = (user_input_1 + user_input_2)
    print(add_result)
0
arilaan 21 listopad 2013, 18:13

Nie przekazujesz wejścia użytkownika do późniejszych funkcji, które opierają się na nim, takie jak Calc_add ().

Sposób naprawienia tych problemów byłoby zmodyfikowanie takiego kodu taka:

def startup_screen():
    user_1 = int(input("Please enter your first number.\n"))
    user_2 = int(input("Now please enter your second number.\n"))
    command_home(user_1,user_2)

def command_home(u1,u2):
    command = input("Now what would you like to do with these two numbers?\n").lower()
    if command == "add":
        calc_add(u1,u2)
    elif command == "subtract":
        calc_subtract(u1,u2)
    elif command == "multiply":
        calc_multiply(u1,u2)
    elif command == "divide":
        calc_divide(u1,u2)

def calc_add(user_input_1,user_input_2):
    add_result = (user_input_1 + user_input_2)
    print(add_result)

"""the rest of the functions go here, must be defined to take the inputs passed"""

startup_screen()

Przedefiniowaliśmy komenda_home, aby wziąć dwa obiekty jako wejścia (co powinno być user_1 i user_2 z load_screen). Możesz nazwać ich cokolwiek, ale zadzwoniłem do nich u1 i u2, więc nie musiałbym tak bardzo wpisywać. Teraz command_home ma te wartości i mogą z kolei przekazać je do funkcji, które nazywa, które je wymagają. Zmieniliśmy również wszystkie wywołania funkcji w bloku {{x 6}} / elif, tak aby u1 i u2.

Następnie, mamy zamieszkany calc_add, aby wziąć dwa wejścia i zadzwoniłem do nich tak samo jak już w funkcji, więc miałbym jedną mniejszą linię do zmiany - user_input_1 i user_input_2 i user_input_2 i user_input_2 .

Teraz, kiedy poprosisz o ich dodanie razem w add_result, istnieją i mają oczekiwane wartości, więc wszystko działa.

0
selllikesybok 21 listopad 2013, 20:48