2.6 公式计算

1)让用户输入任意两个整数相乘的内容(如“2*3”) 能输出“2*3=6”,比如运行情况为:

让我们一步一步完成。先完成输入:

strs = input()

假设我们输入的是“2*3”,那么现在首先就需要将星号前后的两个数值拆分出来。这个可以利用字符串自带的split函数来实现:

strs = input()
print(strs.split('*'))

运行结果为:

 

 看得出,split方法会以圆括号中指定的字符来分割当前字符串,并得到前后两个字符串,分别是‘2’和‘3’。两个数值构成一个列表,因此可以通过列表元素分别得到:

strs = input()
num = strs.split('*')
print(num[0], num[1])

运行结果为:

也可以使用这样的写法分别获取前后两个分割出来的数值: 

strs = input()
a, b = strs.split('*')
print(a, b)

运行结果为:

 此时的结果不再是列表,就是两个字符串类型的变量值。

请注意,这个‘2’和‘3’都是字符类型,因此不可以直接代数运算:

strs = input()
a, b = strs.split('*')
print(a * b)

运行结果有错误,错误信息是说不能对非整数进行乘积运算:

因此需要转换整数后进行代数运算:

strs = input()
a, b = strs.split('*')
print(int(a) * int(b))

运行结果为:

这个结果就是我们准备输出结果的尾部内容。因此可以将以前输入的内容拼接到这个结果前面,不就形成了最终所要的样子了吗?

strs = input()
a, b = strs.split('*')
print(strs + int(a) * int(b))

 运行结果有错误,错误信息是说只能将字符连接到字符上:

 原因很简单,strs为字符串,int(a)是整数,当然不能直接相加。进一步完善为:

strs = input()
a, b = strs.split('*')
print(strs + str(int(a) * int(b)))

运行结果为:

仔细观察可以发现,最后的输出少了个等于号,再次修改为:

strs = input()
a, b = strs.split('*')
print(strs + '=' + str(int(a) * int(b)))

 运行结果为:

当然也可以写成:

strs = input()
a, b = strs.split('*')
print(a + '*' + b + '=' + str(int(a) * int(b)))

输出内容同上。这个有点麻烦,但是效果一样。 

除了这些方法外,我们还可以使用另外一种完全不一样的方法:

strs = input()
print(strs + '=' + str(eval(strs)))

如果输入“2*3”,运行结果为:

如何理解呢?eval函数可以对参数字符串进行直接替换,并嵌入在当前代码中。比如如果输入“2*3”,则eval(strs)就是2*3,此时它的内容中前后并没有引号,因此上述最后一行语句

print(strs + '=' + str(eval(strs)))

替换变为:

print(strs + '=' + str(2 * 3)) 

正好就是可以直接执行的正确语句!

2)计算相似度:

这是著名的余弦相似度,可以计算两个向量之间的距离。比如:

 我们写出了第一个代码:

v11 = 1
v12 = 2
v21 = 3
v22 = 4
fenzi = v11 * v21 + v12 * v22
fenmu = (v11 ** 2 + v12 ** 2) ** 0.5 * (v21 ** 2 + v22 ** 2) ** 0.5
print(fenzi / fenmu)

输出为: 0.9838699100999074

虽然写法看起来很复杂,其实简单,就是按照计算公式将各种常见的代数运算表达出来,大家可以仔细观察。

对于平方和开方,也可以使用math模块中的函数来完成:

import math
v11 = 1
v12 = 2
v21 = 3
v22 = 4
fenzi = v11 * v21 + v12 * v22
fenmu = math.sqrt(math.pow(v11, 2) + math.pow(v12, 2)) * \
        math.sqrt(math.pow(v21, 2) + math.pow(v22, 2))
print(fenzi / fenmu)

输出内容同上。其中,sqrt为开方函数,pow为乘幂函数,圆括号中的第二个参数表示平方。一个细节请注意,由于fenmu表达式很长,使用了 \ 换行符,这个符号表示下一行仍然是接在这句代码的后面,只是为了避免一行显示过长的内容。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

leeshuqing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值