鱼C论坛

 找回密码
 立即注册
查看: 1672|回复: 5

[已解决]求问大佬,这个python程序逻辑哪里有问题?

[复制链接]
发表于 2020-10-8 19:46:55 | 显示全部楼层 |阅读模式

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

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

x
f1 = ['四月的阳光明显比三月要多一些\n']
f2 = ['四月的阳1明显比2月要多3些\n']

num = 0

for i in f1[0]:
    for j in f2[0]:
        if i != j:
            num += 1
            break
        else:
            break

print('共有 %d 出不同' % (num))

我想实现的是比较俩列表中第一个元素的每一个字符是否相同,不同的话计数+1,但是为啥运行完后输出的结果是每一个字符不一样,输出了14处不同。。。明明只有3处不同啊
请问代码逻辑哪里有问题啊?
最佳答案
2020-10-8 19:54:13
本帖最后由 昨非 于 2020-10-8 19:56 编辑
f1 = '四月的阳光明显比三月要多一些\n'
f2 = '四月的阳1明显比2月要多3些\n'

num = 0

for i in range(len(f1)):
    if f1[i] != f2[i]:
        num += 1
print('共有 %d 出不同' % (num))

差别比较关键在于索引值相同,像你那样f1第一个字符依次跟f2的所有字符比较得到的计数自然是不对的
而且只有一个字符串没必要放在列表里,放在外面一样地还省去了索引的麻烦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-8 19:50:20 | 显示全部楼层
因为你这个代码外层遍历一个字符,内层遍历了一遍,输出自然是十四
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-8 19:54:13 | 显示全部楼层    本楼为最佳答案   
本帖最后由 昨非 于 2020-10-8 19:56 编辑
f1 = '四月的阳光明显比三月要多一些\n'
f2 = '四月的阳1明显比2月要多3些\n'

num = 0

for i in range(len(f1)):
    if f1[i] != f2[i]:
        num += 1
print('共有 %d 出不同' % (num))

差别比较关键在于索引值相同,像你那样f1第一个字符依次跟f2的所有字符比较得到的计数自然是不对的
而且只有一个字符串没必要放在列表里,放在外面一样地还省去了索引的麻烦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-8 20:23:32 | 显示全部楼层
昨非 发表于 2020-10-8 19:54
差别比较关键在于索引值相同,像你那样f1第一个字符依次跟f2的所有字符比较得到的计数自然是不对的
而 ...

大哥,我这个程序是不是只会让f1[0]中的每一个字符只与f2[0]中的第1个字符做对比??
运行逻辑是不是这样:外层for先从f1[0]中拿出第一个字符,然后内层for从f2[0]中拿出第一个字符,继续对比是否相同,对比完成后内层for循环因为break跳出循环了,然后集继续运行外层for循环,此时外层for拿出f1[0]的第二个字符,接下来应该是我搞错的地方,即此时内层for依旧拿出的是f2[0]中的第一个字符,并不会因为前面拿过了第一个字符而去拿第二个字符,接着也就是f1[0]中的第二个字符和f2[0]中的第一个字符对比。。以此类推只会让f1[0]中的每一个字符只与f2[0]中的第1个字符做对比,然后输出。
这个逻辑对吗??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-8 20:31:56 | 显示全部楼层
本帖最后由 昨非 于 2020-10-8 20:49 编辑
久远的心宿三 发表于 2020-10-8 20:23
大哥,我这个程序是不是只会让f1[0]中的每一个字符只与f2[0]中的第1个字符做对比??
运行逻辑是不是这 ...


外层循环取一个,有内层多个比较,你这个break虽然在第一次外循环时满足条件,
但当f1取到第二个字符(及其后的所有字符)时,再与f2第一个字符去比,计数当然会错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-8 20:54:06 | 显示全部楼层
昨非 发表于 2020-10-8 20:31
外层循环取一个,有内层多个比较,你这个break虽然在第一次外循环时满足条件,
但当f1取到第二个字符 ...

也就是说用break跳出一个for循环的话,接下来因为其他条件,再次运行这个for循环的话依旧是从头开始循环,而不是从上次break跳出的那个点继续往下循环是吧?我是这里理解错了。。以为break后再次运行能接着上次循环呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-11 00:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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