Jestem raczej nowy do programowania i chciałem zrobić prosty kalkulator jako praktykę, ale nie mogę wydawać się funkcji do pracy tak, jak chciałbym, i jestem pewien, że to dlatego, że czegoś brakuje, ale jestem nie dokładnie pewien, co. Próbowałem szukać niektórych odpowiedzi, ale ja też nie do końca rozumiem lub nie wiedziałem, jak go wdrożyć. W kodzie napisałem, jeśli usunąm zapytać () i zastąpi go kodem, który go zdefiniowałem jako, to działa, ale kiedy używam zapytania (), nie daje błędu stwierdzające, że "Nazwa" X 'nie jest zdefiniowany ". Każda pomoc jest doceniana wraz z wszelkimi wskazówkami lub sposobami, jakie mogłem to poprawić. Z góry dziękuję.

    def Add(x, y):
        print("Adding %d and %d" % (x, y))
        print("Answer:", x + y)

    def Subtract(x, y):
        print("Subtracting %d from %d" % (y, x))
        print("Answer:", x - y)

    def Multiply(x, y):
        print("Multiplying %d and %d" % (x, y))
        print("Answer:", x * y)

    def Divide(x, y):
        print("Dividing %d from %d" % (y, x))
        print("Answer:", x / y)

    def ask():
         print("Which two numbers would you like to use?")
         x = input(">")
         y = input(">")

    print("Would you like to (a)dd, (s)ubtract, (m)ultiply, or (d)ivide two numbers?")

    op = input(">")

    if op == "a":
        ask()
        Add(x, y)

    elif op == "s":
        ask()
        Subtract(x, y)

    elif op == "m":
        ask()
        Multiply(x, y)

    elif op == "d":
        ask()
        Divide(x, y)

     else:
         print("I don't know what that means.")
         print("\n")
1
Rastian 14 sierpień 2014, 02:47

2 odpowiedzi

Najlepsza odpowiedź

Powinieneś zwrócić te wartości, również powinieneś konwertować je na float lub cokolwiek chcesz, dzięki czemu możesz wykonać na nich operacje numeryczne.

def ask():
     print("Which two numbers would you like to use?")
     x = float(input(">"))
     y = float(input(">"))
     return (x,y)

Następnie możesz uzyskać wartości zwrócone z funkcji

if op == "a":
    x,y = ask()
    Add(x, y)
2
Cory Kramer 13 sierpień 2014, 22:50

Czy mogę wykonać kilka sugestii (oprócz twojego problemu w ręku)?:

# use these as templates
str_fun_cal = "{}: {} with {}"
str_res = "Answer: {}"

# Look at the cleanliness of this!!!!
# Also these actually do what they say they do instead of just printing the result out.  Useful for further
# functionality
def Add(x, y):
    return x + y

def Subtract(x, y):
    return x - y

def Multiply(x, y):
    return x * y

def Divide(x, y):
    return x / y

# use a dictionary to select the function the user calls
func_call_dict = {'a':Add, 's':Subtract, 'm':Multiply, 'd':Divide}

# Fixed an issue with not returning any values
def ask():
    print("Which two numbers would you like to use?")
    in_x = float(input(">"))
    in_y = float(input(">"))
    return in_x, in_y

# Printing function to clean things up
def print_fun(fun_call, x, y, res):
    print(str_fun_cal.format(fun_call, x, y))
    print(str_res.format(res))

print("Would you like to (a)dd, (s)ubtract, (m)ultiply, or (d)ivide two numbers?")
op = input(">")

# check to see if in dictionary, if so then execute the corresponding function if not, display error
if op in func_call_dict:
    x, y = ask()
    sel_fun = func_call_dict[op]
    calc_val = sel_fun(x, y)
    print_fun(sel_fun.__name__, x, y, calc_val) # use of `.__name__` returns the name of the function (Add, Subtract, etc,.) 

else:
    print("I don't know what that means.")
    print("\n")
0
James Mertz 13 sierpień 2014, 23:21