我的'非常简单'的Python计算器问题

时间:2013-11-21 18:07:34

标签: python function

我写了另一个简单的程序,我将其称为基本的“Python计算器”。到目前为止,我发现我在Python 3.3.2中编写的一些代码存在问题。这是下面的代码,所以你可以在我陈述我的问题之前阅读它......

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()

在这里,您可以看到我已定义startup_screen,它将用户输入收集为整数,然后分别将其存储在user_1user_2中。然后,用户被带到命令主屏幕,在那里他们可以选择对两个数字进行加,减,乘或除。然后根据用户输入确定该命令,因此如果用户想要添加两个数字,他们键入“add”并将它们带到add函数 - 如上所定义。

但是,在添加功能中,无法识别user_1和user_2输入,以及其他程序......因此会导致程序中出错。我不知道该怎么做。你能帮我吗?

非常感谢...

3 个答案:

答案 0 :(得分:0)

将输入作为参数提供给后面的函数,如果它们是在函数中定义的,则值不是全局变量(任何函数都不能立即访问)。

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)

答案 1 :(得分:0)

让我们从def calc_add():函数的角度来看你的程序。

在第一行,

add_result = (user_input_1 + user_input_2)

你说,取user_input_1的值将其添加到user_input_2并将其转换为变量add_result。好的,这是有道理的。

现在让我们得到第一个值user_input_1 ...让我们看看,首先要检查的是'本地范围'。这就是我目前所处的职能。

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

好吧不,没有...好吧也许这是输入参数之一?

def calc_add():

没有输入参数传递给此函数。好吧它必须是全球性的...但是等待废话......没有全球参数会被剥夺!尤其不是user_input_1。好吧,我应该添加两个参数,但其中一个参数不存在!多数民众赞成不可能我最好抛出错误!

也许如果程序员通过了我需要的信息,它会更好, 也许是这样的:

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)

答案 2 :(得分:0)

您没有将用户的输入传递给后来依赖它的函数,例如calc_add()。

解决这个问题的方法是修改你的代码:

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()

我们重新定义了command_home以将两个对象作为输入(应该是来自user_1的{​​{1}}和user_2)。你可以打电话给他们,但我打电话给他们load_screenu1,所以我不必打那么多。现在,u2具有这些值,并且可以将它们传递给它所需要的函数。我们还更改了command_home / if块中的所有函数调用,以便将elifu1传递给这些函数。

然后,我们已经重新定义u2以获取两个输入,并且我将它们调用为与函数内部相同的内容,因此我需要更少一行来更改 - calc_add和{{ 1}}。

现在,当您要求将它们一起添加到user_input_1时,它们存在且具有预期值,因此现在一切正常。