python - 我在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()
解决方案
类初始化是def __init__(self)
,不是def init(self)
(两边都有两个下划线 _)。
此外,您不需要,因为无论如何您都向用户__init__(self, a, b)
询问。a
b
def __init__(self):
self.a = (int)(input("Enter A: "))
self.b = (int)(input("Enter B: "))
考虑到此代码的级别,您现在可能并不真正需要研究,但将来应该检查用户输入是否可以是 int。否则它会抛出错误并且无论如何都不起作用。
即使我自己重新格式化了问题的代码部分,也没有意识到下划线已经存在。
无论如何,如果你真的想这样做,你需要
- 在实例化时添加参数
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
- 使用此方法格式化字符串您必须使用自动字段编号或手动字段规范:
# 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: "))
推荐阅读
- vb.net - EF Codefirst AddOrUpdate 以相关实体为标识符
- java - Select fields thats not exist in JSON Spark-Json Dataset
- react-native - TabNavigator 中没有内容
- amazon-web-services - How aws step functions were implemented?
- javascript - Firestore update all documents in collections
- vbscript - Skip some text from line
- c - Embedded RTOS producer and consumer with many types of messages
- python - 多端口 pika 连接
- python - 使用 pdf url (pdf2image) 将 pdf 转换为图像
- powershell - 使用 Powershell 拉取 Microsoft AD 中的国家/地区列表