|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
第一题我这样写的
- def gcd(x=1,y=1):
- #gcd(x,y)函数即求x,y的最大公约数
- if x > y:
- a=x
- b=y
- else:
- a=y
- b=x
- while a % b != 0:
- a = b
- b = a % b
- return b
复制代码 第二题及测试是这样写的- >>> def ttt(x):
- b=list()
- if x == 0:
- return 0
- else:
- while x / 2 >=1:
- b.append(x%2)
- b.append(1)
- return b.reverse()
- >>> ttt(1)
- >>> ttt(0)
- 0
- >>> ttt(8)
- Traceback (most recent call last):
- File "<pyshell#11>", line 1, in <module>
- ttt(8)
- File "<pyshell#8>", line 8, in ttt
- b.append(1)
- MemoryError
复制代码 一二题都有Traceback (most recent call last):这个问题,不知道哪里粗了问题
本帖最后由 Twilight6 于 2020-8-18 18:01 编辑
第一题,代码逻辑也有错误,你应该先除后求余,而你直接相等 然后 求余 肯定等于 0 的啊
循环条件我也改了下,参考代码如下:
- def gcd(x=1,y=1):
- #gcd(x,y)函数即求x,y的最大公约数
- if x > y:
- a=x
- b=y
- else:
- a=y
- b=x
- while b != 0:
- c = a % b
- a = b
- b = c
- return a
复制代码
第二题,你 x % 2 之后就是余数了,不用你在加个 1 进到列表中去
而且列表的绝大多数方法没有返回值,所以你直接返回 b.reverse() 永远都是 None的
参考代码:
- def ttt(x):
- b = list()
- if x == 0:
- return 0
- else:
- while x:
- b.append(x % 2)
- x = x // 2
- b.reverse()
- return b
复制代码
如果需要打印出完整的字符串,可以用 join 拼接下,这里的 0b 就表示这里的数字是二进制的意思:
- def ttt(x):
- b = list()
- if x == 0:
- return 0
- else:
- while x:
- b.append(str(x % 2))
- x = x // 2
- b.reverse()
- return '0b'+''.join(b)
复制代码
|
|