全桥整流 发表于 2021-8-21 21:48:46

python课后作业20讲疑问

i=0
list1=[]

str1='''ACFlCTLIQlAIVMTqHFkswqbDDHtpgcWaXSSglUYKE
lqNsYCyaQXBzrFUbkAUAWAKrDgDtAlGMBqWQhpEwquZqWZJpslUfMllCwWptqINjrOBTLuPzwvXNbLCx
oFRritKRpJgBOaGPZdkUzvYnvYmAlEsVmKRXqyQUOdCBqLYyboOYeAQNLnkuiDXCiNiksSSRpDMVQQgs
TmYThnppfKSmkpjjceGLaMOvYgsvNkGENKgGtUSzVPlLMeephDKrWGNpAxBqRiCnQIuKwDZurIRsznUp
xhstMWpHdZzqeEnttlAHiWbhbIJpwKBAGsFWthBiwBDKTFzIUamELZJFLbmqOmwBIYBJIofAUyxTLUEm
LcOXzjIHFcfUfEWccbWzhVuIZMdTVsOaNsLTpHjrvFaYTnJUrqaYnUmbobfOXXtkjKjFUEhVNlPWeaIY
uABNuEDKFWiUaqQiBHGsgEmDSKiJKLkkzFWlobXIyUlDzGcwDnEOwwWxgFpebsslmKItazIYctPROSJp
ImDHusQIkoFQSmuqwdcPNERvflfHtkGTrtbQXqZUsazoxmbVTPIuuxKvfALAaGnIuIZwczCcoIRMncBs
timFGHPJPaHMPTLjsBjIwbbzKyghaDTUStzJceaYAneywwpvdiUJifPHtXmAwZPChWsDmwonzeeQCEiB
xWsJLAtrdVEOBxEaYiSabHdUwlXlDOAKzZUwozJoBGvnFttDkXdYdjQSzzhTIPfYpWVFdiFIqSbyPZIi
VoXunBPbAJVMWluPcIfHmjPeHaTyClCvTOucEYEZXbVDiZMsfeuruDGMmQEsHutzvzVmWvCoPRguBiHh
taTeaguPmNuAxzYJLEcdoApfIFBaLUqettjTJNlHZYlJZRRoKXEvFnoUHdPjDuXuTAubGODkHAokpItw
SlEwhjrUSlfMawWlTMciWAzVcgPcqCHIaogokYAWGsvWZzBfJqzxIkCNvHDvBkOMCyeYXzVVuRJLQIOy
BMoVPgFLOagDxyPfWxTtZQNCLOrVVclPzMNYruNUyMOBKxBvinxuGMAAfndhPsROtkOJAAJQSxpmTzXm
CmEwZOhlItvETUneqvdKLghLyREjuJWRFjVVuNMiPuvvmRaEUmjCXDVuMRAvBuHUYGKPXthWISIbueRp
uvxpmqclmrXpAGFrxhJGxQwlrbkHEmcEUooCoPqGzbrCfIWmtUKmzzXvcqbhxKcAwXCNjbJDWDndKiLK
HwaFKyhXJQgHjIaTfIJrkhUpTHJZebRertDigQtDKxGerMRgHWFTrqqZlcBjAUfTZdFlZCAEZnhzgTIy
'''   #删了一部分,不然占用太多空间
for t in str1:
    i = i+1
    list2=
    if t.islower():
      for s in list2:
            if str1.isupper():
                list1.append(t)


请用已学过的知识编写程序,找出小甲鱼藏在下边这个长字符串中的密码,密码的埋藏点符合以下规律:Y5d|MAp
Y5d|MAp
    a) 每位密码为单个小写字母Powered by bbs.fishc.com
    b) 每位密码的左右两边均有且只有三个大写字母qH{]*ZR
               
      
      
      
      
      
      
   

全桥整流 发表于 2021-8-21 21:49:33

这样写有什么问题吗,感觉思路上是对的

大马强 发表于 2021-8-21 22:28:22

当然啦,你这句
if str1.isupper():
                list1.append(t)
表示一旦是大写就符合
题目的要求是找出前后有且仅有三个大写字母的小写字母

白two 发表于 2021-8-21 23:06:58

本帖最后由 白two 于 2021-8-21 23:09 编辑

你这有大问题啊

首先两边有且只有 3 个大写字母,所以得判断第前后 4 位为小写(得分两种例外情况,开始和结束的时候,只需要判断前 4 位和后 3 位 或者 前 3 位和后 4 位)
其次下表越界问题,你的 i 从 0 开始,所以得判断 list2 的首位是否小于 0 或者最后一位是否大于字符长度
最后你的判定有问题,周围六位 for 循环的时候只要该元素是一个大写字母,就把 t 加进去,而并非周围六位全为大写才加入
可以考虑如下:
a = 0
for s in list2:
    if str1.isupper():
      a += 1
      if a == 6:
            list1.append(t)


总体更改如下:
str1='''ACFlCTLIQlAIVMTqHFkswqbDDHtpgcWaXSSglUYKE
lqNsYCyaQXBzrFUbkAUAWAKrDgDtAlGMBqWQhpEwquZqWZJpslUfMllCwWptqINjrOBTLuPzwvXNbLCx
oFRritKRpJgBOaGPZdkUzvYnvYmAlEsVmKRXqyQUOdCBqLYyboOYeAQNLnkuiDXCiNiksSSRpDMVQQgs
TmYThnppfKSmkpjjceGLaMOvYgsvNkGENKgGtUSzVPlLMeephDKrWGNpAxBqRiCnQIuKwDZurIRsznUp
xhstMWpHdZzqeEnttlAHiWbhbIJpwKBAGsFWthBiwBDKTFzIUamELZJFLbmqOmwBIYBJIofAUyxTLUEm
LcOXzjIHFcfUfEWccbWzhVuIZMdTVsOaNsLTpHjrvFaYTnJUrqaYnUmbobfOXXtkjKjFUEhVNlPWeaIY
uABNuEDKFWiUaqQiBHGsgEmDSKiJKLkkzFWlobXIyUlDzGcwDnEOwwWxgFpebsslmKItazIYctPROSJp
ImDHusQIkoFQSmuqwdcPNERvflfHtkGTrtbQXqZUsazoxmbVTPIuuxKvfALAaGnIuIZwczCcoIRMncBs
timFGHPJPaHMPTLjsBjIwbbzKyghaDTUStzJceaYAneywwpvdiUJifPHtXmAwZPChWsDmwonzeeQCEiB
xWsJLAtrdVEOBxEaYiSabHdUwlXlDOAKzZUwozJoBGvnFttDkXdYdjQSzzhTIPfYpWVFdiFIqSbyPZIi
VoXunBPbAJVMWluPcIfHmjPeHaTyClCvTOucEYEZXbVDiZMsfeuruDGMmQEsHutzvzVmWvCoPRguBiHh
taTeaguPmNuAxzYJLEcdoApfIFBaLUqettjTJNlHZYlJZRRoKXEvFnoUHdPjDuXuTAubGODkHAokpItw
SlEwhjrUSlfMawWlTMciWAzVcgPcqCHIaogokYAWGsvWZzBfJqzxIkCNvHDvBkOMCyeYXzVVuRJLQIOy
BMoVPgFLOagDxyPfWxTtZQNCLOrVVclPzMNYruNUyMOBKxBvinxuGMAAfndhPsROtkOJAAJQSxpmTzXm
CmEwZOhlItvETUneqvdKLghLyREjuJWRFjVVuNMiPuvvmRaEUmjCXDVuMRAvBuHUYGKPXthWISIbueRp
uvxpmqclmrXpAGFrxhJGxQwlrbkHEmcEUooCoPqGzbrCfIWmtUKmzzXvcqbhxKcAwXCNjbJDWDndKiLK
HwaFKyhXJQgHjIaTfIJrkhUpTHJZebRertDigQtDKxGerMRgHWFTrqqZlcBjAUfTZdFlZCAEZnhzgTIy
'''   #删了一部分,不然占用太多空间
# str1 = '''ABSaDKSbRIHcRHGcdDIF'''
i=0
list1=[]
l = len(str1)
for t in str1:
    list2=
    if t.islower():
      if list2 >= 0 and list2[-1]<l:
            if str1].islower() and str1].islower():
                a = 0
                for s in range(1,7):
                  if str1].isupper():
                        a += 1
                        if a == 6:
                            list1.append(t)
      elif list2 == -1:
            if str1].islower():
                a = 0
                for s in range(1,7):
                  if str1].isupper():
                        a += 1
                        if a == 6:
                            list1.append(t)
      elif list2[-1] == l:
            if str1].islower():
                a = 0
                for s in range(1,7):
                  if str1].isupper():
                        a += 1
                        if a == 6:
                            list1.append(t)
    i += 1
print(list1)

全桥整流 发表于 2021-8-23 10:29:12

白two 发表于 2021-8-21 23:06
你这有大问题啊

首先两边有且只有 3 个大写字母,所以得判断第前后 4 位为小写(得分两种例外情况,开始 ...

第22行有什么用?

白two 发表于 2021-8-23 12:26:02

把字符串长度的值赋给一个变量,就不需要每次循环就执行一遍 len 方法了

全桥整流 发表于 2021-8-23 14:09:58

白two 发表于 2021-8-23 12:26
把字符串长度的值赋给一个变量,就不需要每次循环就执行一遍 len 方法了

但是后面没有用过   l这个变量,又要赋值给他?后面没有用的话赋值给他有什么用呢,但是删了这行会报错

全桥整流 发表于 2021-8-23 14:11:38

白two 发表于 2021-8-23 12:26
把字符串长度的值赋给一个变量,就不需要每次循环就执行一遍 len 方法了

我懂了,26行用到了,我以为那个是1
页: [1]
查看完整版本: python课后作业20讲疑问