lin1481989286 发表于 2018-11-30 15:49:54

20讲第二题,也不知道写的对不对,请大神帮我看看

def xjy_20():
    with open("F:\work\PYQT\date\string2.txt","r",encoding="utf-8") as f:
      x = f.read()
    count_1 = 0# 密码前大写字母个数
    count_2 = 0# 密码后大写字母个数
    list = (" ")   # 密码
    def upper():    # 判断小写字母出现后的元素是不是3个连续的大写字母并且第四个不是大写字母
      nonlocal count_2, list
      m = 0
      while ord(x) in range(65, 91):
            print(x)
            m += 1
            count_2 += 1
            if count_2 == 3 and ord(x) not in range(65, 91):
                list += (x)# 将密码添加到密码字符串
                return list
      else:count_2 = 0
    for n in range(len(x)-5): #将文件列表顺序迭代
      z = ord(x) # 将文件列表内元素转换为ASCII码
      if z in range(65,91):#判断元素是不是大写字母
            count_1 += 1 #记录大写字母个数
            if count_1 == 3:#判断大写字母是否连续出现3次
                if ord(x) in range(97,123): # 判断大写字母出现3次后的元素是不是小写字母
                  upper()
      else:count_1 = 0 #重置密码前大写字母出现的个数
    print(list)
xjy_20()

heidern0612 发表于 2018-11-30 18:29:22

抱歉你写的我没太看明白,字符串转ASC码是个新思路。

我简单的把你的x变量改了下,结果输入的结果不对。

你可以试下。


def xjy_20():
    x = 'ABCdEFGHiJKLmNOP'
    count_1 = 0# 密码前大写字母个数
    count_2 = 0# 密码后大写字母个数
    list = (" ")   # 密码
    def upper():    # 判断小写字母出现后的元素是不是3个连续的大写字母并且第四个不是大写字母
      nonlocal count_2, list
      m = 0
      while ord(x) in range(65, 91):
            print(x)
            m += 1
            count_2 += 1
            if count_2 == 3 and ord(x) not in range(65, 91):
                list += (x)# 将密码添加到密码字符串
                return list
      else:count_2 = 0
    for n in range(len(x)-5): #将文件列表顺序迭代
      z = ord(x) # 将文件列表内元素转换为ASCII码
      if z in range(65,91):#判断元素是不是大写字母
            count_1 += 1 #记录大写字母个数
            if count_1 == 3:#判断大写字母是否连续出现3次
                if ord(x) in range(97,123): # 判断大写字母出现3次后的元素是不是小写字母
                  upper()
      else:count_1 = 0 #重置密码前大写字母出现的个数
    print(list)
xjy_20()

lin1481989286 发表于 2018-12-4 09:35:50

heidern0612 发表于 2018-11-30 18:29
抱歉你写的我没太看明白,字符串转ASC码是个新思路。

我简单的把你的x变量改了下,结果输入的结果不对。 ...

我修改了一下,打了几个补丁。。。。
def xjy_20():
    with open("F:\work\PYQT\date\string2.txt", "r", encoding="utf-8") as f:
      x = f.read()
    x += '11111'
    list = (" ")# 密码
    count_1 = 0# 统计小写字母前大写字母个数
    count_2 = 0# 统计小写字母后大写字母个数
    for n in range(len(x)-5): #将文件列表顺序迭代
      z = ord(x) # 将文件列表内元素转换为ASCII码
      if z in range(65,91):#判断元素是不是大写字母
            count_1 += 1 #记录大写字母个数
            if count_1 == 3:#判断大写字母是否连续出现3次
                if ord(x) in range(97,123): # 判断大写字母出现3次后的元素是不是小写字母
                  m = 0
                  while ord(x) in range(65, 91): # 判断小写字母出现后的元素是不是3个连续的大写字母并且第四个不是大写字母
                        m += 1
                        count_2 += 1
                        # print(count_2)
                        # print(x)
                        if count_2 == 3 and ord(x) not in range(65, 91):# 判断小写字母出现后的元素是不是3个连续的大写字母并且第四个不是大写字母
                            list += (x)# 将符合条件的小写字母添加到密码字符串
                            #break
                  else:
                        count_2 = 0
                        m = 0
      else:count_1 = 0 #重置密码前大写字母出现的个数
    print(list)
xjy_20()
页: [1]
查看完整版本: 20讲第二题,也不知道写的对不对,请大神帮我看看