大家好,我是小白Bjarnein,小学时你有这些烦恼吗?
计算时啥啥不会,总是算错。
求解最大公因数,最小公倍数时头痛算不出来,用了短除法也不行,最后发现其中的一个数就是最大公因数。
计算面积体积是总是搞错公式
以上的烦恼你都有吗?今天我用Python特意开发另一个小学生专用计算器,小学生们不用再为数学而烦恼了!
首先我们实现选取计算器的功能,使用简单的if语句就能搞定。
print("1.计算器\n2.求解两个数最大公因数\n3.求解两个数最小公倍数\n4.面积、体积计算器")
choose = input("请问使用哪个功能?请输入开头数字:")
if choose == "1":
pass
elif choose == "2":
pass
elif choose == "3":
pass
else:
pass
其中的“\n”是制表符,萌新们要记一下,这个比纯输入换行字符要好。
先来实现第一个功能:计算器。
我们先定义三个变量,分别是:first_num、second_num、operation。前两个用于定义两个要进行计算的数字,后一个是运算符号。
first_num = input("请问第一个数是什么:")
# 运算符号
operation = input("请问运算符号是什么:")
print("除法运算保留5位小数点")
if not("+" or "-" or "*" or "/" in operation):
print("基本运算符号不存在于回答中")
# 第二个数
second_num = input("请问第二个数是什么:")
但这时有一个问题:我们不知道用户输入的是浮点数还是整数,而input()返回的结果是字符串类型,需要进行转换。如果将3这个整形转换成浮点型,就会变成3.0。这时候还没什么大事,但如果将3.3转换成整形,就会直接进行向下舍入,变成3。聪明的同学就会想:直接把所有输入的数字全都转换成浮点型就行了。但我采用的是一种更高雅的方法。
first_num = input("请问第一个数是什么:")
if "." in first_num:
first_num = float(first_num)
else:
first_num = int(first_num)
# 运算符号
operation = input("请问运算符号是什么:")
print("除法运算保留5位小数点")
if not("+" or "-" or "*" or "/" in operation):
print("基本运算符号不存在于回答中")
# 第二个数
second_num = input("请问第二个数是什么:")
if "." in second_num:
second_num = float(second_num)
else:
second_num = int(second_num)
我们在其中加入了一个if语句,由于我们刚输入时没有从字符串类型转换成其他类型,所以可以进行一个if判断,但如果是其他类型,就不能进行判断,会报错。我们判断用户输入的数字中是否含有小数点,毕竟小数点是小数的标志。然后有小数点的转化成浮点型,没小数的转换成整形。
忘记说了,所有编程语言基本都有一个缺点:就是精度丢失。我们知道,计算机使用的是二进制,而我们人类使用的是十进制。所以输入的数字会在计算机那里进行处理,两个数计算过后再转换成十进制。而由于存储数据的长度只有64位,所以转换过程中会产生莫名其妙小数点很多位后突然增加几个数字。所以说你在任何编程语言中让计算机print 1.3加1.3并不一定等于2.6。所以说我们在进行任何涉及到浮点数的计算的时候需要进行四舍五入。小学涉及的计算一般到小数点后5位,所以我们保留5位小数点就够了。
if operation == "+":
out = first_num + second_num
out = round(out, 5)
print("{}+{}的运算结果是:{}".format(first_num, second_num, out))
elif operation == "-":
out = first_num - second_num
out = round(out, 5)
print("{}-{}的运算结果是:{}".format(first_num, second_num, out))
elif operation == "*":
out = first_num * second_num
out = round(out, 5)
print("{}*{}的运算结果是:{}".format(first_num, second_num, out))
else:
out = first_num / second_num
out = round(out, 5)
print("{}/{}的运算结果是:{}".format(first_num, second_num, out))
我们这里使用round()函数进行四舍五入,其中第一个空填入要四舍五入的数字,第二个空填入保留小数点多少位。
这里我们计算器的功能基本实现,但有的时候还是会精度丢失,我后面再进行更改,这个四舍五入已经可以应对大多数的精度丢失了。
这里大家千万千万不要用+号进行拼接字符串,由于各个的类型不同,拼接会显示报错。所以这里使用format方法进行拼接,在字符串中写入{}大括号就可以进行拼接了。比+号拼接的方法快了很多。
接下来我们实现的是最大公因数的功能,我这里直接采用暴力计算,这样方便快捷。你也可以使用《九章算术》中的方法。
a = int(input('第一个数是什么?不可以是小数:'))
b = int(input('第二个数是什么?不可以是小数:'))
gcd = 1
for i in range(2, min(a, b) + 1):
if a % i == 0 and b % i == 0:
gcd = i
print(a, b, "两数最大公因数为:",gcd)
这个方法我从网上找的,但自己没怎么明白,直接复制了过来,但这个方法是可行的。
而求最小公倍数也要用这个循环,计算出最大公因数后套用这个公式:A数 * B数 /最大公因数。这样就可以得到最小公倍数了。
下面是面积、体积计算的功能,表面积功能我还没做,过几天我更新一下。这个面积、体积计算很简单,无非是一些if语句判断,很简单,这里就不给大家讲解了。
这里就给大家放出源代码吧。
# 多功能计算器
# 功能
# 1.计算器
# 2.求解两个数最大公因数
# 3.求解两个数最小公倍数
# 4.解一元一次方程
# 5.面积、体积计算器
print("1.计算器\n2.求解两个数最大公因数\n3.求解两个数最小公倍数\n4.面积、体积计算器")
choose = input("请问使用哪个功能?请输入开头数字:")
if choose == "1":
# 计算器
# 第一个数
first_num = input("请问第一个数是什么:")
if "." in first_num:
first_num = float(first_num)
else:
first_num = int(first_num)
# 运算符号
operation = input("请问运算符号是什么:")
print("除法运算保留5位小数点")
if not("+" or "-" or "*" or "/" in operation):
print("基本运算符号不存在于回答中")
# 第二个数
second_num = input("请问第二个数是什么:")
if "." in second_num:
second_num = float(second_num)
else:
second_num = int(second_num)
# 输出
if operation == "+":
out = first_num + second_num
out = round(out, 5)
print("{}+{}的运算结果是:{}".format(first_num, second_num, out))
elif operation == "-":
out = first_num - second_num
out = round(out, 5)
print("{}-{}的运算结果是:{}".format(first_num, second_num, out))
elif operation == "*":
out = first_num * second_num
out = round(out, 5)
print("{}*{}的运算结果是:{}".format(first_num, second_num, out))
else:
out = first_num / second_num
out = round(out, 5)
print("{}/{}的运算结果是:{}".format(first_num, second_num, out))
elif choose == "2":
a = int(input('第一个数是什么?不可以是小数:'))
b = int(input('第二个数是什么?不可以是小数:'))
gcd = 1
for i in range(2, min(a, b) + 1):
if a % i == 0 and b % i == 0:
gcd = i
print(a, b, "两数最大公因数为:",gcd)
elif choose == "3":
a = int(input('第一个数是什么?不可以是小数:'))
b = int(input('第二个数是什么?不可以是小数:'))
gcd = 1
for i in range(2, min(a, b)+1):
if a % i == 0 and b % i == 0:
gcd = i
# 利用算法把最大公因数转换成最小公倍数
lcm = a * b / gcd
print('{},{}两数的最大公倍数为:{}'.format(a, b, lcm))
elif choose == "4":
a = 0
b = 0
h = 0
PI = 3.14
r = 0
s = 0
v = 0
print("1.正方形 2.长方形 3.三角形 4.梯形5.圆形\n6.正方体 7.长方体 8.球 9.圆柱 10.圆锥")
choose = input("请输入要计算的物体或图形:")
if choose == "1":
a = int(input("请输入正方形的边长:"))
s = a * a
print("正方形的面积是:{}".format(s))
elif choose == "2":
a = int(input("请输入长方形的长:"))
b = int(input("请输入长方形的宽:"))
s = a * b
print("长方形的面积是:{}".format(s))
elif choose == "3":
a = int(input("请输入三角形的底:"))
h = int(input("请输入三角形的高:"))
s = a * h / 2
print("三角形的面积是:{}".format(s))
elif choose == "4":
a = int(input("请输入梯形上底的长:"))
b = int(input("请输入梯形下底的长:"))
h = int(input("请输入梯形的高:"))
s = (a + b ) * h / 2
print("梯形的面积是:{}".format(s))
elif choose == "5":
r = int(input("请输入圆的半径:"))
s = PI * (r * r)
print("圆的面积是:{}".format(s))
elif choose == "6":
a = int(input("请输入正方体的棱长:"))
v = a * a * a
print("正方体的体积是:{}".format(v))
elif choose == "7":
a = int(input("请输入长方体的长:"))
b = int(input("请输入长方体的宽:"))
h = int(input("请输入长方体的高:"))
v = a * b * h
print("长方体的体积是:{}".format(v))
elif choose == "8":
r = int(input("请输入球的半径:"))
v = 4/3 * PI * (r * r * r)
print("球的体积是:{}".format(v))
elif choose == "9":
r = int(input("请输入圆柱的半径:"))
h = int(input("请输入圆柱的高:"))
v = PI * (r * r) * h
print("圆柱的体积是:{}".format(v))
else:
r = int(input("请输入圆锥的半径:"))
h = int(input("请输入圆锥的高:"))
v = 1/3 * [PI * (r * r)] * h
如果说各位大神有什么建议的话赶快在评论中指出吧!