鱼C论坛

 找回密码
 立即注册
查看: 3508|回复: 11

[已解决]Python除2取余函数的问题!

[复制链接]
发表于 2017-7-14 17:02:11 | 显示全部楼层 |阅读模式

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

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

x
今天刚刚学习完函数乐高积木,课后题有一题让自己编写一个类似bin()的函数,我编写完程序出现如下错误,谁能告诉我是为啥呀???
注:我的yy()是取余数的意思,之前有编过,但没截图。 TIM截图20170714165837.png
最佳答案
2017-7-17 16:06:49
Coolsize 发表于 2017-7-17 15:05
我的yy函数过程如上,我的函数本身用途是将10进制的任意数字转变为2进制并输出

刚才你的代码没试其他的数,我如果没理解错按我那样改过之后,计算过程是有问题的

按照你的思路把代码改了一下,哪里看不懂再问
  1. def c2qy(m):
  2.     b=0;
  3.     a=0;
  4.     while m != 1:
  5.         a = a + (m % 2)*(10**b)
  6.         m = m//2
  7.         b += 1
  8.     a = a + 10**b
  9.     return a
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-7-14 20:02:34 | 显示全部楼层
我觉得应该是在python中int比float能表示的数大,在你这个程序中,运行到某一步int值过大了导致的
也没给出yy()函数具体实现,也不清楚你这个程序的具体功能,没法帮你调试。。
报错不是说a = a+yy(m,2)*(10**b)这行出问题了么,有问题的变量可能是a、m、b,那就把这三个数分别用下面方法包装一下,再重新运行看是否能行
  1. from decimal import Decimal
  2. Decimal(a)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-15 02:07:35 | 显示全部楼层
把你定义的yy这个函数贴出来 ,不然谁都看不出哪里有问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-17 15:05:34 | 显示全部楼层
本帖最后由 Coolsize 于 2017-7-17 15:07 编辑

我的yy函数过程如上,我的函数本身用途是将10进制的任意数字转变为2进制并输出
TIM截图20170717150504.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-17 15:07:28 | 显示全部楼层
yongxi 发表于 2017-7-15 02:07
把你定义的yy这个函数贴出来 ,不然谁都看不出哪里有问题

您好我上传了,麻烦您给看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-17 15:07:45 | 显示全部楼层
shuofxz 发表于 2017-7-14 20:02
我觉得应该是在python中int比float能表示的数大,在你这个程序中,运行到某一步int值过大了导致的
也没给 ...

您好我上传了,麻烦您给看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-17 15:44:29 | 显示全部楼层
Coolsize 发表于 2017-7-17 15:05
我的yy函数过程如上,我的函数本身用途是将10进制的任意数字转变为2进制并输出

贴代码不是这么贴的。。。编辑栏有个<>,把代码粘贴进去  不然我调试你的代码,还得先把你的代码敲一遍?

接下来是问题:
你用调试工具调试过代码么?简单调试几步就会发现 yy(m,2)!=0 这个条件永远不会成立,因为m后面一直是个小数。问题就出在了m = m/2上,这个是普通的除法,也就是得数是有小数的,按你的程序逻辑这里应该用地板除//才对

还有yy就是一个取余数的函数么?直接写(m%2)就可以了,何必单独定义一个函数呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-17 16:06:49 | 显示全部楼层    本楼为最佳答案   
Coolsize 发表于 2017-7-17 15:05
我的yy函数过程如上,我的函数本身用途是将10进制的任意数字转变为2进制并输出

刚才你的代码没试其他的数,我如果没理解错按我那样改过之后,计算过程是有问题的

按照你的思路把代码改了一下,哪里看不懂再问
  1. def c2qy(m):
  2.     b=0;
  3.     a=0;
  4.     while m != 1:
  5.         a = a + (m % 2)*(10**b)
  6.         m = m//2
  7.         b += 1
  8.     a = a + 10**b
  9.     return a
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2017-7-17 16:38:16 | 显示全部楼层
shuofxz 发表于 2017-7-17 16:06
刚才你的代码没试其他的数,我如果没理解错按我那样改过之后,计算过程是有问题的

按照你的思路把代码 ...

哇,非常感谢您的细心解答,原来问题出在那里!谢谢谢谢~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-17 17:03:46 | 显示全部楼层
Coolsize 发表于 2017-7-17 16:38
哇,非常感谢您的细心解答,原来问题出在那里!谢谢谢谢~~

如果明白了问题 就结一下题呗~ 选个最佳答案出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-18 17:31:35 | 显示全部楼层
shuofxz 发表于 2017-7-17 17:03
如果明白了问题 就结一下题呗~ 选个最佳答案出来

您能给我说一下那个调试工具在哪么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-18 17:36:25 | 显示全部楼层
Coolsize 发表于 2017-7-18 17:31
您能给我说一下那个调试工具在哪么?

idle的调试看看这篇文章,写的很清楚
http://bbs.fishc.com/thread-73510-1-1.html

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 23:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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