Difflib.SequenceMatcher在IF语句中未执行?技术求助
问题原因及解决办法
核心问题
SequenceMatcher.ratio()方法的返回值是0到1之间的浮点数,用来表示两个字符串的匹配相似度(1代表完全匹配,0代表完全不匹配),并非百分比数值。你的代码里把判断条件写成了>=60,但实际计算出的比值约为0.857,远小于60,导致IF语句的条件永远不成立,内部的打印语句自然不会执行。
验证实际比值
运行你的代码时,外部打印的结果应该类似:
It returns a ratio 0.8571428571428571
这个数值才是正确的匹配比值,而非60这类百分比。
修正代码
你可以选择两种方式修正:
- 直接使用0-1范围的数值作为判断条件:
from difflib import SequenceMatcher string_one = 'He is right' string_two = 'He was right' match_ratio = SequenceMatcher(a=string_one,b=string_two).ratio() print("It returns a ratio", match_ratio) if match_ratio >= 0.6: print("It does return a ratio", match_ratio)
- 把比值乘以100转成百分比后再判断:
from difflib import SequenceMatcher string_one = 'He is right' string_two = 'He was right' match_ratio = SequenceMatcher(a=string_one,b=string_two).ratio() * 100 print("It returns a ratio (percent)", match_ratio) if match_ratio >= 60: print("It does return a ratio (percent)", match_ratio)
另外建议把计算出的比值存到变量里,避免重复创建SequenceMatcher实例,提升代码效率。
内容的提问来源于stack exchange,提问作者Abdulrahman Hocaoglu
相关产品推荐
相关产品推荐

