Python分解功能导致不稳定的结果
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python分解功能导致不稳定的结果,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1673字,纯文字阅读大概需要3分钟。
内容图文
![Python分解功能导致不稳定的结果](/upload/InfoBanner/zyjiaocheng/762/7af308ed305b4673b397fa1eeddae794.jpg)
def test_prime(n):
q = True
for p in range(2,n): #Only need to check up to rootn for primes and n/2 for factors
if int(n%p) is 0:
q = False
print(p, 'and', int(n/p), 'are factors of ', n)
if q:
print(n, 'IS a prime number!')
else:
print(n, 'IS NOT a prime number')
我刚刚开始玩Python,我正在整理一些零碎的东西来消磨时间.我一直在玩质数测试,并有想法显示非素数的因素.我上面列出的函数似乎运行得很好,除了输出不一致.
例如如果我设置n = 65432我得到…
2 and 32716 are factors of 65432
4 and 16358 are factors of 65432
8 and 8179 are factors of 65432
8179 and 8 are factors of 65432
16358 and 4 are factors of 65432
32716 and 2 are factors of 65432
65432 IS NOT a prime number
这是我所期待的.但如果我设置n = 659306我得到…
2 and 329653 are factors of 659306
71 and 9286 are factors of 659306
142 and 4643 are factors of 659306
4643 and 142 are factors of 659306
9286 and 71 are factors of 659306
659306 IS NOT a prime number
这是不同的,因为它最后不包括因子329653.这不是问题,因为所有因素都显示在某个地方,但令我讨厌的是,我不知道为什么这会发生在一些数字上!
只是为了告诉你我不是一个完整的白痴,我已经知道这似乎只发生在5个字符长度的整数值上.有人可以告诉我为什么这两种情况的输出不同?
解决方法:
你想要n%p == 0,而不是n%p是0.是测试身份,而不是相等,而不是每个0都与其他0相同.
>>> 659306 % 329653
0
>>> (659306 % 329653) == 0
True
>>> (659306 % 329653) is 0
False
>>> id(0)
136748976
>>> id(659306 % 329653)
3070888160
那里的id基本上对应于内存中的位置.
可以这样想:如果你有一个加元,我有一个加元,那么它们在价值上是相等的(1 == 1),但它们不是同一个物体(我的一美元硬币不是与你的一美元硬币相同.)我们可以分享相同的硬币,但我们没有必要这样做.
[PS:您可以使用n // p进行整数除法而不是int(n / p).]
内容总结
以上是互联网集市为您收集整理的Python分解功能导致不稳定的结果全部内容,希望文章能够帮你解决Python分解功能导致不稳定的结果所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。