foxdai 发表于 2020-3-31 18:49:14

L20 函数和闭包(1) 课后作业

本帖最后由 foxdai 于 2020-4-1 18:56 编辑

1. 全局变量
a.全局变量屏蔽
b.函数适合调用全局变量,而不要去修改全局变量
c.关键字global

2. 内嵌函数=内部函数

3. 闭包(closere))
关键字nonlocal(注意与global的差异)

list语言

global
nonlocal

*动动手,就按字符串中每个字符的数量
(**0**)
#1.字符串含每个字符的个数
#2.长字符串中,拆成每一行为一个字符串,然后单独计算每个字符串中包含每个字符的个数;
'''
1.定义变量:字符串集合、字符串计数
1.1 字符串集合,每次查询有不同的,则将其加入,并且给与新的变量,且数量+1;
2.自定义函数2个函数,
(1)一个字符串时候在原有的字符集中,如果没有则加入,字符集变量用列表
(2)字符计数,变量存储用列表
3 长字符串拆解
(1)将长字符串,拆成更小的字符串;
(2)对小字符串,进行步骤2的操作
4.用思维导图先拆解
'''

动动手#Start 字符串计数
#字符太多,示例如下,能说明问题
str1 = '''%%$@_$^__#)^)&!_+]!*@&^}@[@%]()%+$&[(_@%+%$*^@$^!+]!&_#)_*}{}}!}_]$[%}@[{_@#_^{*
@##&{#&{&)*%(]{{([*}@[@&]+!!*{)!}{%+{))])[!^})+)$]#{*+^((@^@}$[**$&^{$!@#$%)!@(&
+^!{%_$&@^!}$_${)$_#)!({@!)(^}!*^&!$%_&&}&_#&@{)]{+)%*{&*%*&@%$+]!*__(#!*){%&@++
!_)^$&&%#+)}!@!)&^}**#!_$([$!$}#*^}$+&#[{*{}{((#$]{[$[$$()_#}!@}^@_&%^*!){*^^_$^
]@}#%[%!^[^_})+@&}{@*!(@$%$^)}(@_{{(*#%!%%+*)^+#%}$+_]#}%!**#!^_
'''

#定义字符集列表变量,存放不同字符的集合
#定义字符累计数列表变量,记录每个字符的数量
strbox = []
countlst = []
#Function defining
def strcheck(x):
    global strbox, countlst
    if x in strbox:
      countlst += 1
    else:
      strbox.append(x)
      countlst.append(0)
      countlst[-1] += 1

#Main process
#拆解长字符为短字符串
strlst = str1.split()
strcount = len(strlst)
for i in range(strcount):
    strnew = strlst.strip()
    for a in strnew:
      strcheck(a)

#显示统计结果
length=len(strbox)
for i in range(length):
    print('字符 ',strbox,'个数: ',countlst,end=' , ')
    if ((i+1) % 3) == 0:
      print('\n')
for i in range(length):
    if strbox.isalpha():
      for b in range(countlst):
            print(strbox,end='')

****
动动手,查找字符串中的密码
str2= '''小甲鱼老师给的字符串string2.txt'''

strlst = str2
length = len(str2)
keybox = []
for i in range(4,length-3):
    if strlst.isalpha() and strlst.islower:
      prestr = strlst
      endstr = strlst
      if '\n' in prestr+endstr:
            continue
#下面的判断,对回车符'\n'未能判断出,判断大写和字母时不能区分,小甲鱼加了去重复字符,不理解了吧
      if strlst.isalpha() and strlst.islower() and \
         prestr.isupper() and endstr.isupper() and strlst not in keybox:
            keybox.extend(,i])
      else:
            continue
    else:
      continue


'''
#计算正确,单个字符计算,代码较长
      for x in range(i-1,i-4,-1):
            if strlst.isalpha() and strlst.isupper():
                prebig = True
            else:
                prebig = False
                break
      if prebig != True:
            continue
      else:
            for x in range(i+1,i+4):
                if strlst.isalpha() and strlst.isupper():
                  endbig = True
                else:
                  endbig = False
                  break
            if endbig:
                keybox.extend(strlst)
            else:
                continue
'''


#key display 验证密码,小甲鱼老师的代码,知道其原理,但是逻辑没看懂
print('key is: ')
#for i in keybox:
#    print(i,end='')

a = 0
for i in keybox:
      if type(i) == int:
                print(strlst,'=',strlst,' ',strlst,' ',strlst,end=' ; ')
                a += 1
                if a % 3 ==0:
                  print('\n')





      

永远的渣滓 发表于 2020-3-31 19:35:16

我也学到这了{:10_277:}
页: [1]
查看完整版本: L20 函数和闭包(1) 课后作业