函数在python计算器中不起作用

函数在python计算器中不起作用,python,function,Python,Function,我设法建立了一个计算器,但当我想添加函数时,它不能正常工作。您可以在代码和注释中看到函数。如果启用该功能,res将始终为0,并将添加最后一个数字。如果没有该函数,您可以执行所需的操作数,并且它可以正常工作。我试着把函数放在while循环中,但结果是一样的。我怎样才能解决这个问题 class Calc: num = float(input("Enter nr: ")) operator = str(input("Enter operator")) res = 0

我设法建立了一个计算器,但当我想添加函数时,它不能正常工作。您可以在代码和注释中看到函数。如果启用该功能,
res
将始终为0,并将添加最后一个数字。如果没有该函数,您可以执行所需的操作数,并且它可以正常工作。我试着把函数放在while循环中,但结果是一样的。我怎样才能解决这个问题

class Calc:
    num = float(input("Enter nr: "))
    operator = str(input("Enter operator"))
    res = 0

    # def add(num, res):
    #     res += num
    #     print(res)

    while operator != "=" : 

        if operator == '+' :
            res += num
            print(res)

            #add(num,res)
            #returns all the time 0+num,doesn`t add to res

        elif operator == '-' :
            res -= num
            print(res)

        elif operator == '*' :
            res *= num
            print(res)

        elif operator == '/' :
            res /= num
            print(res)

        else:
            print("Wrong operator!")

        operator = str(input("Enter operator"))
        num = float(input("Enter nr: "))

下面是一个如何在类中集成函数的快速示例
这只是一个示例,帮助您更好地理解如何使用Python类

class Calc:

    def __init__(self):
        self.first_num = float(input("Enter first nr: "))
        self.operator = str(input("Enter operator"))
        self.second_num = float(input("Enter second nr: "))

    def add(self):
        res=self.first_num + self.second_num
        print(res)

    # def minus(self):
    #   res=self.first_num - self.second_num
    #   print(res)

    def start(self):
        while(self.operator != "="):

            if self.operator == '+' :
                self.add()

            elif self.operator == '-' :
                res -= num
                print(res)
                # self.minus()

            elif self.operator == '*' :
                res *= num
                print(res)

            elif self.operator == '/' :
                res /= num
                print(res)

            else:
                print("Wrong operator!")

            self.first_num = float(input("Enter first nr: "))
            self.operator = str(input("Enter operator"))
            self.second_num = float(input("Enter second nr: "))

# instantiate Calc class and start it
calc_obj = Calc()
calc_obj.start()

我建议你读一读关于课堂的文章

如果您的目的是创建一个计算器,那么就不需要做那么多的工作,您可以使用
eval
函数来实现同样的功能,下面是该功能的实现
eval
函数只需将字符串作为参数并为您计算结果

def calc():
cal=输入(“开始计算:”)
res=评估(校准)
打印(res)
calc()
谈到你想学习python类,正如@chepner在评论中所说,类是物理或逻辑世界对象的行为和属性的包装器。它们用于封装数据。现在考虑到python是一种非常动态的语言,您可以在类之外编写方法和变量

但在纯面向对象语言中并非如此。一切都应该在课堂上进行。所以,如果你想学习课堂,那么你应该考虑如何学习课堂。同样的实现只是在您正在寻找的特定语言中寻找语法。我会建议你去了解班级的实际行为

首先理解本教程,然后考虑如何在python中实现这个概念


希望这有帮助

问题在于,尽管您正在更改函数中“res”的值。它不影响外部变量的值

我的意思是,当您将变量res传递给函数时,您传递的是变量的副本,而不是变量本身。当您在函数内部将num添加到res时,它会更改仅存在于函数内部而不存在于函数外部的变量副本

要解决您的问题:

num = float(input("Enter nr: "))
operator = str(input("Enter operator"))
res = 0

def add(res, num):

    res += num
    return res

while operator != "=" : 

    if operator == '+' :
        res = add(res, num)
        print(res)

在这里,我在函数内部“返回”了res的值,并将函数外部的变量赋给它,然后打印出该值。

为什么要将所有值都放在类中而不使用方法?更好地创建函数。如果使用类,则必须使用
self.res
来访问所有函数中的变量/MethodClass旨在封装数据,并提供对该数据进行操作的方法,以便用户无法直接操作数据。在这里,您只是将该类用作Java风格的代码包装器(因为Java不允许类外的代码)。