首页 > 解决方案 > 我在python中使用类和格式函数制作了一个基本计算器,没有错误也没有运行

问题描述

可以进行哪些更改,以便我可以仅使用一个打印语句打印用户友好的输出.....如果格式可以提供帮助但现在没有输出会很有帮助.....

class Calc:
    def __init__(self,a,b): # we can pass other parameters also in the constructor for assigning values
        self.a=(int)(input("Enter a"))
        self.b=(int)(input("Enter b"))

    def add(self):
        return self.a+self.b

    def sub(self):
        return self.a-self.b

    def mult(self):
        return self.a*self.b

    def div(self):
        return self.a/self.b

    def calculator(self):
        print("""sum of {0} and {1}= {} 
             subtraction of {0} and {1}={}
             Multiplication of {0} and {1}={}
             Division of {0} and {1}={}""".format(c1.a,c1.b,c1.add(),c1.sub(),c1.mult(),c1.div()))
        

c1=Calc()
c1.calculator()

标签: pythonclassformatcalculator

解决方案


类初始化是def __init__(self),不是def init(self)(两边都有两个下划线 _)。

此外,您不需要,因为无论如何您都向用户__init__(self, a, b)询问。ab

def __init__(self): 
    self.a = (int)(input("Enter A: ")) 
    self.b = (int)(input("Enter B: "))

考虑到此代码的级别,您现在可能并不真正需要研究,但将来应该检查用户输入是否可以是 int。否则它会抛出错误并且无论如何都不起作用。

即使我自己重新格式化了问题的代码部分,也没有意识到下划线已经存在。

无论如何,如果你真的想这样做,你需要

  1. 在实例化时添加参数Calc()或删除参数:
class Calc:
    def __init__(self):
        ...

c1 = Calc()
# Next one does NOT work
c3 = Calc(var1) # Too many arguments given
class Calc:
    def __init__(self, a, b):
        ...

c1 = Calc(var1, var2)
# Next one does NOT work
c2 = Calc() # Too few arguments given

__init__()除非参数是可选的,否则不能在不匹配其参数的情况下创建类的新对象

class Ob:
    def __init__(self, a=None, b=None):
        ...

c1 = Ob(var1) # a=var1, b=None
c2 = Ob(b=var2) # a=None, b=var2
c3 = Ob(var1, var2) # a=var1, b=var2
  1. 使用此方法格式化字符串您必须使用自动字段编号或手动字段规范:
# This does NOT work:
print("Sum of {0} and {1}= {}".format(self.a, self.b, self.add()))

# This one DOES work:
print("Sum of {0} and {1}= {2}".format(self.a, self.b, self.add()))

#This one also works:
print("Sum of {} and {}= {}".format(self.a, self.b, self.add()))

正如@wovano 所说,input()对象初始化是一种不好的做法。在您的代码的情况下,最好有一个空__init__()且单独的函数来调用input()

def __init__(self):
    pass

def ask_input(self):
    self.a = (int)(input("Enter A: "))
    self.b = (int)(input("Enter B: "))

推荐阅读