鱼C论坛

 找回密码
 立即注册
查看: 2508|回复: 7

[已解决]20讲课后编程题有bug

[复制链接]
发表于 2020-11-1 21:23:36 | 显示全部楼层 |阅读模式

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

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

x
假如我们的字符串是 'ABCaABCbABCcABCd' 的时候,按照答案的代码,不会打印 'b',代码如下:
  1. str1 = '''ABCaABCbABCcABCd'''
  2. c1 = 0
  3. c2 = 0
  4. c3 = 0
  5. lenth = len(str1)
  6. for i in range(lenth):
  7.     if str1[i] == '\n':
  8.         continue
  9.     if str1[i].isupper():
  10.         if c2 == 1:
  11.             c3 += 1
  12.             c1 = 0
  13.         else:
  14.             c1 += 1
  15.         continue
  16.     if str1[i].islower() and c1 == 3:
  17.         c2 = 1
  18.         c1 = 0
  19.         t = i
  20.         continue
  21.     if str1[i].islower() and c3 == 3:
  22.         print(str1[t],end='')
  23.     c1 = 0
  24.     c2 = 0
  25.     c3 = 0
复制代码

i=0时,大写,此时c1=1,c2=0,c3=0
i=1时,大写,此时c1=2,c2=0,c3=0
i=2时,大写,此时c1=3,c2=0,c3=0
i=3时,小写,此时c1=0,c2=1,c3=0,t=3
i=4时,大写,此时c1=0,c2=1,c3=1
i=5时,大写,此时c1=0,c2=1,c3=2
i=6时,大写,此时c1=0,c2=1,c3=3
i=7时,小写,此时c1=0,c2=1,c3=3,所以打印a,然后重置c1=0,c2=0,c3=0
以此重复,当i=11时和i=7时的情况一样,理所当然会打印t=11时的字符,也就是'c',这样就跳过了t=7时的字符也就是'b'
有没有什么解决的办法,我想了好久没想明白怎么改代码
最佳答案
2020-11-2 22:10:05
小白的转行之路 发表于 2020-11-2 20:44
如果把字符串改为 'ABCaABCbbABCcABCd' 的话,这个代码还是不对......
  1. str1 = '''ABCaABCbABCcABCd'''
  2. c1 = 0
  3. c2 = 0
  4. c3 = 0
  5. lenth = len(str1)
  6. for i in range(lenth):
  7.     if str1[i] == '\n':
  8.         continue
  9.     if str1[i].isupper():
  10.         if c2 == 1:
  11.             c3 += 1
  12.             c1 = 0
  13.         else:
  14.             c1 += 1
  15.         continue
  16.     if str1[i].islower() and (c1 == 3):
  17.         c2 = 1
  18.         c1 = 0
  19.         t = i
  20.         continue
  21.     if  str1[i].islower() and (c3 == 3):
  22.         print(str1[t],end='')
  23.         t = i                          #
  24.         c1 = 0                       #<---改这里
  25.         c2 = 1                       #
  26.         c3 = 0                       #
  27.     else:                             #
  28.         c1 = 0
  29.         c2 = 0
  30.         c3 = 0
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-11-1 21:25:10 | 显示全部楼层
补充一下,题目的要求是
a) 每位密码为单个小写字母
b) 每位密码的左右两边均有且只有三个大写字母
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-1 22:10:30 | 显示全部楼层
小白的转行之路 发表于 2020-11-1 21:25
补充一下,题目的要求是
a) 每位密码为单个小写字母
b) 每位密码的左右两边均有且只有三个大写字母

这题目的两个要求 明显有冲突呀
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-2 04:52:09 | 显示全部楼层
  1. str1 = '''ABCaABCbABCcABCd'''
  2. c1 = 0
  3. c2 = 0
  4. c3 = 0
  5. lenth = len(str1)
  6. for i in range(lenth):
  7.     if str1[i] == '\n':
  8.         continue
  9.     if str1[i].isupper():
  10.         if c2 == 1:
  11.             c3 += 1
  12.             c1 = 0
  13.         else:
  14.             c1 += 1
  15.         continue
  16.     if str1[i].islower() and (c1 == 3):
  17.         c2 = 1
  18.         c1 = 0
  19.         t = i
  20.         continue
  21.     if  str1[i].islower() and (c3 == 3):
  22.         print(str1[t],end='')
  23.         t = i                          #如果发现前一个字母符合条件,而当前字母是小写,则符合前3大写+小写规则
  24.         c1 = 3                       #
  25.         c2 = 1                       #
  26.         c3 = 0                       #
  27.     else:                             #
  28.         c1 = 0
  29.         c2 = 0
  30.         c3 = 0
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-2 20:44:28 | 显示全部楼层

如果把字符串改为 'ABCaABCbbABCcABCd' 的话,这个代码还是不对......
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-2 21:42:09 | 显示全部楼层

我这个是旧代码,更新后的代码思路很清晰
https://fishc.com.cn/thread-42685-1-1.html
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-2 22:10:05 | 显示全部楼层    本楼为最佳答案   
小白的转行之路 发表于 2020-11-2 20:44
如果把字符串改为 'ABCaABCbbABCcABCd' 的话,这个代码还是不对......
  1. str1 = '''ABCaABCbABCcABCd'''
  2. c1 = 0
  3. c2 = 0
  4. c3 = 0
  5. lenth = len(str1)
  6. for i in range(lenth):
  7.     if str1[i] == '\n':
  8.         continue
  9.     if str1[i].isupper():
  10.         if c2 == 1:
  11.             c3 += 1
  12.             c1 = 0
  13.         else:
  14.             c1 += 1
  15.         continue
  16.     if str1[i].islower() and (c1 == 3):
  17.         c2 = 1
  18.         c1 = 0
  19.         t = i
  20.         continue
  21.     if  str1[i].islower() and (c3 == 3):
  22.         print(str1[t],end='')
  23.         t = i                          #
  24.         c1 = 0                       #<---改这里
  25.         c2 = 1                       #
  26.         c3 = 0                       #
  27.     else:                             #
  28.         c1 = 0
  29.         c2 = 0
  30.         c3 = 0
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-3 22:41:41 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-29 07:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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