鱼C论坛

 找回密码
 立即注册
查看: 1429|回复: 8

[已解决]17讲第3题 显示索引超出范围,怎么改呢

[复制链接]
发表于 2020-3-18 23:37:41 | 显示全部楼层 |阅读模式

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

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

x
#编写一个将十进制转换为二进制的函数,要求采用“除2取余”的方式,
#结果与调用bin()一样返回字符串形式。
def change(num):
    liebiao=[ ]
    i=0
    shang=0
    while shang==1:
        liebiao[i]=num%2   #取余
        shang=num//2       #取商
        num=shang
        i=i+1
    liebiao[i]=1 #因为循环当shang=1时就结束了,而商为1时,也就是二进制的最高位是1
    return(liebiao)

number=int(input('enter a numner:'))
result=change(number)
print(str(result))
        
   
最佳答案
2020-3-19 12:55:21
猪猪虾 发表于 2020-3-19 12:09
请问一下,这里while shang怎么理解

while shang  就是 while shang!=0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-18 23:56:14 | 显示全部楼层
错误太多了。
1、shang的初始值不应该是0,应该是num,然后每次循环时减少一位
2、while循环的条件怎么可能是shang==1,这样的话如何进入循环?
3、列表最开始为空,根本没有元素,怎么可能使用赋值语句,应该使用insert插入语句
4、直接在循环中将每一位都插入到列表中,何必在循环结束之后再写一句呢。。。
def change(num):
    liebiao=[ ]
    i=0
    shang=num     #这里shang的初始值怎么能是0呢。
    while shang:  #这里的循环条件为什么是shang==1?那样怎么进入循环?
        liebiao.insert(0,num%2)   #取余,这里一个是列表的插入操作而非赋值,因为刚开始列表为空
        shang=num//2       #取商
        num=shang
        i=i+1
    #liebiao[i]=1 #因为循环当shang=1时就结束了,而商为1时,也就是二进制的最高位是1
    return(liebiao)

number=int(input('enter a numner:'))
result=change(number)
print(str(result))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-19 01:13:10 | 显示全部楼层
def change(num):
    liebiao = list()  # 保存二进制结果
    shang = num

    while shang:
        liebiao.append(num % 2)  # 将余数添加到列表
        shang = num // 2  # 取商
        num = shang

    return liebiao


number = int(input('enter a number:'))
result = change(number)
print(result[::-1])    # 将列表中保存的二进制结果反向输出
新手,代码仅供参考
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-19 12:09:56 | 显示全部楼层
sunrise085 发表于 2020-3-18 23:56
错误太多了。
1、shang的初始值不应该是0,应该是num,然后每次循环时减少一位
2、while循环的条件怎么可 ...

请问一下,这里while shang怎么理解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-19 12:10:33 | 显示全部楼层
km82805046 发表于 2020-3-19 01:13
新手,代码仅供参考

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

使用道具 举报

发表于 2020-3-19 12:54:38 | 显示全部楼层
猪猪虾 发表于 2020-3-19 12:09
请问一下,这里while shang怎么理解

while shang 是循环判断条件,用于判断整数是否为0时,当为0时 结束循环;而整个循环的功能是将整数进行除2取余数,将余数存储到列表中, shang = num // 2   输入的整数 整除2以后 得到新的的整数,作为循环判断条件,直到shang 为0 时,结束循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-19 12:55:21 | 显示全部楼层    本楼为最佳答案   
猪猪虾 发表于 2020-3-19 12:09
请问一下,这里while shang怎么理解

while shang  就是 while shang!=0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-19 13:05:58 | 显示全部楼层
sunrise085 发表于 2020-3-19 12:55
while shang  就是 while shang!=0

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

使用道具 举报

 楼主| 发表于 2020-3-19 13:07:02 | 显示全部楼层
km82805046 发表于 2020-3-19 12:54
while shang 是循环判断条件,用于判断整数是否为0时,当为0时 结束循环;而整个循环的功能是将整数进行 ...

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-25 01:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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