1、对问答库进行拆分,将文本分别拆分为问题库和答案库。
2、将问题进行文本处理:循环遍历问题库里每一个问题。对每一个问题进行文本处理:首先加载停用词库,对问题用nltk分词进行小写化、去停用词、数值归一后重新加入到一个问题库,对这个已经处理完的问题库用zipf定律进行词频过滤。对输入的问题进行文本处理。将处理好的问题库词向量化(用qlove或word2vec,包子词向量化是将词向量相加取平均)后计算问题库向量L2范数。将处理好的输入问题词向量化并计算问题向量L2范数。
3、建立一个简单的倒排表。
4、利用倒排表计算问题库词向量和输入问题词向量的余弦相似度。
5、建立优先队列,采用(优先级(余弦相似度),与相似度对应的问题答案下标)(值越小,优先级越大)找出ToD所对应的答案下标。
6、根据找出的答案下标到答案库里遍历打印即可。
题目没有限定输入的边长一定为整数,应该改为浮点数float
判断是否能构成三角形还要保证三条边都为正数
能构成三角形时再计算面积,否则可能出现负数开根号的情况,会报错
输出要求保留1位小数,要用格式化输出
修改后的代码如下:
import math
x = float(input('请输入三角形的边a:')) # 边长可能为浮点数
y = float(input('请输入三角形的边b:'))
z = float(input('请输入三角形的边c:'))
if x>0 and y>0 and z>0 and x+y>z and x+z>y and y+z>x: # 还要判断是否是正数
p=(x+y+z)/2
s=math.sqrt(p*(p-x)*(p-y)*(p-z)) # 能构成三角形的话再计算面积
print('三角形的周长=%.1f, 面积=%.1f' % (x+y+z, s)) # 格式化输出,保留1位小数
else:
print('无法构成三角形')
以上代码运行通过,但图片中没有看到输出测试样例,请自行修改print语句以符合输出
解题思路:需要实现两个函数,一个是判断数字是否是素数;一个是求和函数。
实现函数,判断是否是素数,is_prime,具体代码如下:
def is_prime(num):
"""
判断是否是素数.
:param num:
:return:
"""
result = True
# 质数大于 1
if num >1:
# 查看因子
for i in range(2, num):
if (num % i) == 0:
result = False
break
else:
result = True
# 如果输入的数字小于或等于 1,不是质数
else:
result = False
return result
实现函数,计算数字start到end之间的所有素数之和,sum,具体代码如下:
def sum(start, end):
"""
求闭区间[start, end]之间的素数之和.
:param start:
:param end:
:return: """
result = 0
for i in range(start, end + 1):
if is_prime(i):
print(i)
result = result + i
return result
在main函数中调用求和,代码如下:
if __name__ == '__main__':
num = 8
print(is_prime(num))
num = 5
print(is_prime(num))
print(sum(1, 5))
完整 代码如下: