machangyou 发表于 2020-3-20 19:52:05

零基础学习Python 第20讲 动动手 第1题 求解

本帖最后由 machangyou 于 2020-3-20 19:53 编辑

题目:1请用已学过的知识编写程序,找出小甲鱼藏在下边这个长字符串中的密码,密码的埋藏点符合以下规律:
    a) 每位密码为单个小写字母
    b) 每位密码的左右两边均有且只有三个大写字母


length=len(str2)
for each in range(4,length-4):
      a=str2#提取each右边的三个字符
      b=str2#提取each左边的三个字符
      c=str2#提取each左边第四个字符
      d=str2#提取each左边第四个字符
      for i in str2:
                if i.islower():
                        if a.isupper() and b.isupper() and c.isupper()==False and d.isupper()==False:#判断each左右两边的三个字符为大写且第四个字符不是大写字母
                              print(i,end='')

请各位鱼油帮我看看我这段代码的问题出在哪里?
参考答案的返回结果是:ilovefishc
我的返回结果是:uilovefisdhc

txxcat 发表于 2020-3-20 19:59:48

你是三个字符一起判断,表面上看上去可以,但是文本中包含有换行符'\n',会占用一个字符位而且isupper()会忽略,造成连续两个大写字符就判定为True,你多的两个字符就是这样来的,解决方法是把三个字符分开来判断,具体怎么实现有很多方法,再想想吧。

jackz007 发表于 2020-3-20 20:16:12

本帖最后由 jackz007 于 2020-3-20 20:22 编辑

s , p = 'a' + '' . join(str1 . split('\n')) + 'a' , ''
for k in range(4 , len(s) - 4):
    if s . islower() and s . isupper() and s . islower() and s . isupper() and s . islower() : p += s
print(p)
      让 str1 = 小甲鱼的字符串,然后运行这个代码。
       三引号字符串可以跨行,会把每个行末的换行符也带入字符串,换行符对于判断字符串属于干扰因素,所以, 第一行代码主要用于去除 str1 中所有的换行符 '\n',并在 str1 的首尾各添加一个小写字符 'a'。

machangyou 发表于 2020-3-23 11:31:57

jackz007 发表于 2020-3-20 20:16
让 str1 = 小甲鱼的字符串,然后运行这个代码。
       三引号字符串可以跨行,会把每个行末的 ...

非常感谢!

machangyou 发表于 2020-3-23 11:32:29

txxcat 发表于 2020-3-20 19:59
你是三个字符一起判断,表面上看上去可以,但是文本中包含有换行符'\n',会占用一个字符位而且isupper()会 ...

非常感谢!
页: [1]
查看完整版本: 零基础学习Python 第20讲 动动手 第1题 求解