鱼C论坛

 找回密码
 立即注册
查看: 2531|回复: 3

[已解决]质因子

[复制链接]
发表于 2019-1-4 21:08:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
def f(n):
    for i in range (2,n+1):
        if n%i==0:
          return i
x=""
n=int(input("请输入数:"))
while f(n)!=n:
    x=x+str(f(n))+"*"
    n%=f(n)
print(x+str(n))
请问为什么会报错··
   
最佳答案
2019-1-5 07:27:20
本帖最后由 heidern0612 于 2019-1-5 07:36 编辑
,逗号, 发表于 2019-1-4 22:29
而且我在while循环第一行输入过print(type(f(n))),运行的时候第一次循环是int,第二次是Nonetype,然后就是 ...


想法很好,return的含义是结束函数调用,返回一个值。

也就是说,return会直接让函数返回,函数就运行结束了,所有该函数的代码都不再执行了,所以再次调用会返回一个空值。

你的while循环里面加个break,保证只调用一次就可以了。

  1. def f(n):
  2.     for i in range (2,n+1):
  3.         if n%i==0:
  4.           return i
  5. n=int(input("请输入数:"))
  6. x=""
  7. while f(n)!=n:
  8.     x=x+str(f(n))+"*"
  9.     n%=f(n)
  10.     break
  11. print(x+str(n))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-1-4 22:29:58 | 显示全部楼层
而且我在while循环第一行输入过print(type(f(n))),运行的时候第一次循环是int,第二次是Nonetype,然后就是第二次循环的Nonetype无法与n相除导致的报错,不明白
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-5 07:27:20 | 显示全部楼层    本楼为最佳答案   
本帖最后由 heidern0612 于 2019-1-5 07:36 编辑
,逗号, 发表于 2019-1-4 22:29
而且我在while循环第一行输入过print(type(f(n))),运行的时候第一次循环是int,第二次是Nonetype,然后就是 ...


想法很好,return的含义是结束函数调用,返回一个值。

也就是说,return会直接让函数返回,函数就运行结束了,所有该函数的代码都不再执行了,所以再次调用会返回一个空值。

你的while循环里面加个break,保证只调用一次就可以了。

  1. def f(n):
  2.     for i in range (2,n+1):
  3.         if n%i==0:
  4.           return i
  5. n=int(input("请输入数:"))
  6. x=""
  7. while f(n)!=n:
  8.     x=x+str(f(n))+"*"
  9.     n%=f(n)
  10.     break
  11. print(x+str(n))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-5 09:07:21 | 显示全部楼层
heidern0612 发表于 2019-1-5 07:27
想法很好,return的含义是结束函数调用,返回一个值。

也就是说,return会直接让函数返回,函数就运 ...

好像不是这个的问题,是因为我那个除号用的取余的,然后第二遍循环的时候除数为0,就变成了Nonetype,我把%换成//就可以正确运行了,我这个做法是要求出一个数的质因子连乘,调用一次虽然不会报错但是达不成题目要求,是我没说清不好意思,不过还是感谢。
   
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-23 13:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表