鱼C论坛

 找回密码
 立即注册
查看: 1626|回复: 13

[已解决]我的False为什么变成0了?

[复制链接]
发表于 2019-1-15 00:18:24 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 Stubborn 于 2019-1-15 00:19 编辑
  1. n = [False,1,0,1,2,0,1,3,"a"]
  2. for i in range(len(n)):
  3.     try:
  4.         i = str(n[i])
  5.         i = int(i)
  6.     except ValueError:
  7.         print("try",i)
  8.         continue
  9.     print(i)
  10.     if i in [0,]:
  11.         n.append(i)
  12.         n.remove(i)
  13. print(n)
复制代码


代码功能就是把0挪到列表末尾、测试的时候打印,False没有进入if判断,为什么不见了?试过,False可以转字符串,但是不能转回数字啊?

  1. try False
  2. 1
  3. 0
  4. 2
  5. 0
  6. 3
  7. try a
  8. 0
  9. 0
  10. [1, 1, 2, 1, 3, 'a', 0, 0, 0]
复制代码
最佳答案
2019-1-15 09:40:40
因为python吧False和0等同看待了。
  1. >>> n=[False, True]
  2. >>> n.remove(0)
  3. >>> n
  4. [True]
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-1-15 08:00:43 | 显示全部楼层
  1. >>> int(False)
  2. 0
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2019-1-15 09:40:40 | 显示全部楼层    本楼为最佳答案   
因为python吧False和0等同看待了。
  1. >>> n=[False, True]
  2. >>> n.remove(0)
  3. >>> n
  4. [True]
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-15 10:25:56 | 显示全部楼层
本帖最后由 13572044595 于 2019-1-15 10:37 编辑

你代码里面 9 个元素,结果也是 9 个元素, False 转换为 0 输出了,

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-15 12:32:29 | 显示全部楼层
False 对应的值为0,表示结果为真,这个有什么问题吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-15 16:20:01 | 显示全部楼层
冬雪雪冬 发表于 2019-1-15 09:40
因为python吧False和0等同看待了。

3Q 虽然False没有进判断,安装0值来删,还是会把False删掉
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-15 16:20:39 | 显示全部楼层

谢谢班利塔大神。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-15 16:21:41 | 显示全部楼层
13572044595 发表于 2019-1-15 10:25
你代码里面 9 个元素,结果也是 9 个元素, False 转换为 0 输出了,

谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-15 16:22:28 | 显示全部楼层
zhangxiuyuxzg 发表于 2019-1-15 12:32
False 对应的值为0,表示结果为真,这个有什么问题吗?

头像非常(๑•̀ㅂ•́)و✧,求分享
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-15 16:59:55 | 显示全部楼层
本帖最后由 sunrise085 于 2019-1-15 17:05 编辑

首先解答你的问题。之所以False变成0,是Python机制问题。在Python中,bool类型继承于int类型,所以True==1,False==0,所以在你的程序中False被当做0删除了,然后在末尾添加了一个0 。想让程序跳过False,可以用is语句。稍后附上程序。

再说说你的程序存在的问题。虽然程序能运行出正确结果(暂且忽略False问题),但是你的程序其实有很大的问题。
举个例子:
for循环,第三次,i=2,检测到n[2]=0,程序会修改列表n,新的列表n=[1,0,1,2,0,1,3,"a",0];
for循环,第四次,i=3,此时本来应该检测到n[3]=1,但是由于修改了列表,现在n[3]=2,相当于把愿列表中的第3个元素跳过去了;

这样每次检测到一个0元素,就会跳过一个元素。
程序能得到正确的结果,是因为循环次数是列表的长度,每调整一个0元素的位置,末尾就会多一个0,删除的总是列表最前面的0,执行到后面的时候,0元素已经都放在后面了,但是还是检测到了0元素,就会继续删除前面的0,在末尾添加0.因此也能够输出正确的结果。
实际上每次调整的并不一定是当前检测到的0。
你看一下你的输出结果第四行,本来不是应该为1么?每次出现一个0,就会跳过一个元素,元素'a'最后出现在第七次循环中,之后又出现两个0,是你移动到后面去的两个0 。

我修改之后的程序
  1. n = [False,1,0,1,2,0,1,3,"a"]
  2. m=[]
  3. num=0
  4. print('调整之前的列表:',n)
  5. for i in range(len(n)):   #查询0元素所在的位置
  6.     if n[i] is 0:
  7.         m.append(i) #保存0元素的位置
  8. print(m)  #输出0元素的位置,这一行可以不写
  9. for i in m:
  10.     n.pop(i-num)  #删除对应的0元素
  11.     n.append(0)   #在末尾添加0元素
  12.     num+=1     #每调整一个0元素的位置,之后的元素会向前移动一位,下一个0元素的下标就会减小1
  13.     print(n)   #查看这次调整之后的列表,这一行可以不写
  14. print('调整之后的列表:',n)
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
13572044595 + 5 + 5 + 3 鱼C有你更精彩^_^

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2019-1-15 17:04:47 | 显示全部楼层
冬雪雪冬 发表于 2019-1-15 09:40
因为python吧False和0等同看待了。

呃,敲字这么久,敲完之后,发现楼主已经选出最佳了。。。心累啊。。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-15 17:41:19 | 显示全部楼层
sunrise085 发表于 2019-1-15 17:04
呃,敲字这么久,敲完之后,发现楼主已经选出最佳了。。。心累啊。。。。

我可以重新开贴,给你最佳哈哈
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-16 09:09:06 | 显示全部楼层
Stubborn 发表于 2019-1-15 17:41
我可以重新开贴,给你最佳哈哈


重在交流~~~在回答的过程中自己也相当于重新捋了一遍相关知识。你可以看看我的签名~~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2019-1-20 15:39:13 | 显示全部楼层
Stubborn 发表于 2019-1-15 16:22
头像非常(๑•̀ㅂ•́)و✧,求分享

都是找我要头像的,原图我已经找不到了【发愁】,你们图片搜索一下?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-25 15:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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