python - 使用查找除数的函数,找到任意两个给定两个正整数的最大公约数
问题描述
这是我到目前为止所拥有的
def div(x):
A=[]
for i in range(1,x):
if x%i==0:
A.append(i)
print(A)
div(45)
div(50)
n=0
for i in range(1, min(45, 50)+1):
if 45%i==50%i==0:
n+=1
print(max(n))
TypeError Traceback (most recent call last)
<ipython-input-8-80ad9173d3fa> in <module>
11 if 45%i==50%i==0:
12 n+=1
---> 13 print(max(n))
TypeError: 'int' object is not iterable
我尝试了多种逻辑,但最终都出现了一些错误。这是最合适的。我还是个新手,所以一个简单的程序仍然给我带来了问题。这个问题只是用来测试我们的逻辑构建。
解决方案
您的行将n=0
名称定义n
为整数。然后稍后您尝试执行print(max(n))
.
换句话说,您尝试计算max()
单个整数的 。这就是引发您的错误消息的原因。max() 的文档给出了 的两种有效用法max()
:单个可迭代(例如列表)或多个值(例如整数)。不允许使用单个整数。
我不确定你的意图是什么,所以我不能建议你对你的程序做一点小改动。我建议你改变你的方法。相反,您可以这样做:
- 调用
div()
两个整数中的每一个,得到两个除数列表。 - 将每个列表转换为Python 集。
- 计算这两组的交集(有关执行此操作的操作,请参见上一个链接)。你现在有一组公约数。
- 在该交集中找到最大值。由于集合是可迭代的,
max()
因此将在该集合上工作。得到的最大值是你的最大公约数。
代码应该很容易编写。如果您有困难,请展示您的尝试并寻求更多帮助。
顺便说一句,您的div
功能不正确。范围的上限应该是x + 1
包含数字x
作为除数——任何整数都可以除以自身。而不是打印列表,div()
应该将列表返回给调用例程。
推荐阅读
- google-assistant-sdk - 与 IFTTT 集成后,Google 助理无法正常工作
- xml - VB.NET 4.7:尝试将选中的项目从 CheckedListBox 添加到 XML 元素中,但我得到了意外的输出
- kernel - [qemu]一直黑屏!我认为这个现象来自内核的配置文件
- javascript - JSON 加载器模型
- python - 尽可能快地散列 1000 个图像文件(2000x2000 加上分辨率)(Python)
- javascript - 在客户端 javascript 中使用 i18next 和 XHR 后端
- python - 为什么 Jupyter Notebook 不会加载模块?
- android - 从相机捕获和显示图像?
- javascript - 当我在 webpack 配置中添加 css 加载器时,tinymce 突然停止工作
- python-2.7 - Tensorflow API Ubuntu 14.04 python 2.7 错误