为了账号安全,请及时绑定邮箱和手机立即绑定

str.find == -1但字符串不能通过if条件

str.find == -1但字符串不能通过if条件

ABOUTYOU 2021-05-06 16:19:03
#!/usr/bin/env python# coding=utf-8import sysreload(sys)sys.setdefaultencoding('utf8')import jsonimport requestsfrom chardet import detectfalse = Falsenull = ""true = True#from werobot import clientfile_path = 'data1.json'with open(file_path) as f:    js = f.read()dic = eval(js)def ana(month):    i = len(dic["items"])-1    st = ""    while i > 0:        #print dic["items"][i]["name"]        if st.find(dic["items"][i]["name"]) == -1:            #print st.find(dic["items"][194]["name"])            st = st + dic["items"][i]["properties"]["lastModifiedDate"][0:4].replace("/",".")+" " + dic["items"][i]["name"] +str(i)+"\n"            i = i - 1        i = i - 1    return st all_data = ana("7")print all_datast.find(dic [“ items”] [194] [“ name”])= -1但它不能通过if条件:st.find(dic [“ items”] [i] [“ name”])== -1data1.json在要点上:data1.json在要点上该代码有什么问题吗?
查看完整描述

1 回答

?
慕莱坞森

TA贡献1810条经验 获得超4个赞

您递减i两次:一次在if语句中,一次在while循环中。因此,当if语句的计算结果为时True,i将2总共减少,您将跳过的一些值i。


快速测试表明确实i == 194可以跳过:i从跳转195到193。因此,您提及的特定比较不会被评估,因为i永远不会被评估194。


这很容易评估和调试自己:只需print(i)在每个循环中使用,就在if语句之前,然后看看它是如何变化的。


另外,您声明您的输入是字典。实际上,它是一个完全有效的JSON文件,您可以(应该)按以下方式读取它:


import json


with open(sys.argv[1]) as f:

    dic = json.load(f)

无需使用eval,无需使用false = False; null = ""; true = True。这些行只会造成混乱和(严重)错误,应将其删除。请注意,顺便说一下,null(JSON)是None在Python中转换的,而不是""(空字符串)。


查看完整回答
反对 回复 2021-05-25
  • 1 回答
  • 0 关注
  • 179 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号