马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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)
|