Twilight.. 发表于 2020-11-21 16:55:54

旧版20讲中动动手的第一题

passward = ''
length = len(string2)
for i in range(length):
    each = string2
    if each == '\n':
      continue
    if each.islower():
      total1 = string2
      total2 = string2
      total3 = string2
      total4 = string2
      if total1.isupper() + total2.isupper() == 2:
            if (total3.isupper() + total4.isupper() == 0):
                passward = passward + each
    total1 = ''
    total2 = ''
    total3 = ''
    total4 = ''

print(passward)


这个是我20讲动动手的做法,大概思路是在前三个以及后三个字母全都是大写的前提下比较第四个字母大小写
首先左边三个大写字母赋予字符串total1,右边三个大写字母赋予字符串total2,左边第四个字母赋予total3,右边第四个字母赋予total4
在total1和total2全为大写字母的前提下,若total3,4全为小写字母 得到密码对应字母
可是结果为:uilovefisdhc
并非想要的

我在网上找到了相似的另一种做法:
passward = ''
length = len(string2)
for i in range(length):
    each = string2
    if each == '\n':
      continue
    if each.islower():
      if string2.isupper() + string2.isupper() == 2:
            if string2.isupper() + string2.isupper() == 2:
                if string2.isupper() + string2.isupper() == 2:
                  if string2.isupper() + string2.isupper() == 0:
                        passward = passward + each

print(passward)

他的思路大概是将目标字母两侧相同距离的字母大小写进行判断,若左右两侧三个字母全为大写,但两侧第四个字母全为小写的情况下输出对应密码
这种做法的结果是正确的
求教大佬们我代码本身哪方面出了问题,麻烦你们了,谢谢!

gonff 发表于 2020-11-21 22:55:57

本帖最后由 gonff 于 2020-11-21 22:57 编辑

>>> a = 'Fish'
>>> a.isupper()
False
>>> a = 'F HK'
>>> a.isupper()
True
>>> a = 'F\nHK'
>>> a.isupper()
True
>>> a = '\n'
>>> a.isupper()
False
看起来isupper()对于一长串字符时,不会去管非字母字符。对于单个字符则可以判断。

Twilight.. 发表于 2020-11-22 15:04:34

gonff 发表于 2020-11-21 22:55
看起来isupper()对于一长串字符时,不会去管非字母字符。对于单个字符则可以判断。

谢谢大佬!我确实忽略了这个情况
页: [1]
查看完整版本: 旧版20讲中动动手的第一题