1248956321 发表于 2021-4-18 15:12:43

课后作业遇到问题

甄别一段字符串中的密码

1每位密码为单个小写字母
2每位密码的左右两边均有三个大写字母

我打的代码是:

def myfunt(char):
   
    shuchu = []
    for i in char:
      
      x = char.rfind(i)
      
      if i.islower() == Trueand char.isupper() == char.isupper() == True:
            shuchu.append(i)

    print(shuchu)

char = input("请输入需要甄别的字符串:")

myfunt(char)

打代码的时候我就发现一个问题
rfind()是返回最高索引值,如果密码中有两个相同的小写字母的话这段代码应该不行
但是当我F5运行后却发现完全没问题
比如输入ASDmLOK51454131MVFyKILkjhk65465jjYASxMKIdfa 得到密码 m y x
输入 ASDmLOK51454131MVFyKILkjhk65465jjYASxMKIdfaKKKyLLLs6546 得到密码 m y x y
请问这是怎么回事?

紧接着我又发现一个问题
isupper() 不是应该是全部是大写字母才返回True 么?
怎么如果有个数字在其中也返回True?
比如 y = '6PP'
y.isupper()
返回True

这样如果输入ASDmLOK51454131MVFyKILkjhk65465jjYASxMKIdfaKKKyLLLs6LLLxPPP
密码就会是['m', 'y', 'x', 'y', 's', 'x']

请问该使用哪个函数能解决? 还是我思路有问题?

柿子饼同学 发表于 2021-4-18 18:01:32

{:9_241:}

柿子饼同学 发表于 2021-4-18 18:11:27

柿子饼同学 发表于 2021-4-18 18:01


def myfun(s):
    n = len(s)
    l = []
    for i in range(2, n-2):
      if s.islower():
            if s.isupper() and s.isupper():
                l.append(s)
      
这不需要那些东西的,最后会得出一个有密码的列表

柿子饼同学 发表于 2021-4-18 18:19:33

柿子饼同学 发表于 2021-4-18 18:11
这不需要那些东西的,最后会得出一个有密码的列表

def myfun(s):
    n = len(s)
    l = []
    for i in range(2, n-2):
      if s.islower():
            if (s.isupper()and s.isalpha()) and (s.isupper()and s.isalpha()):
                l.append(s)
    print(l)
对不起对不起,草率了,这个可以的

柿子饼同学 发表于 2021-4-18 18:20:52

柿子饼同学 发表于 2021-4-18 18:19
对不起对不起,草率了,这个可以的

isalpha()是用来看她这个字符串是否都是字母,这里起到了排除数字的作用{:9_229:}
页: [1]
查看完整版本: 课后作业遇到问题