|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 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[strbox.index(x)] += 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[i].strip()
for a in strnew:
strcheck(a)
#显示统计结果
length=len(strbox)
for i in range(length):
print('字符 ',strbox[i],'个数: ',countlst[i],end=' , ')
if ((i+1) % 3) == 0:
print('\n')
for i in range(length):
if strbox[i].isalpha():
for b in range(countlst[i]):
print(strbox[i],end='')
****
[b]动动手,查找字符串中的密码[/b]
str2= '''小甲鱼老师给的字符串string2.txt'''
strlst = str2
length = len(str2)
keybox = []
for i in range(4,length-3):
if strlst[i].isalpha() and strlst[i].islower:
prestr = strlst[i-3:i]
endstr = strlst[i+1:i+4]
if '\n' in prestr+endstr:
continue
#下面的判断,对回车符'\n'未能判断出,判断大写和字母时不能区分,小甲鱼加了去重复字符,不理解了吧
if strlst[i].isalpha() and strlst[i].islower() and \
prestr.isupper() and endstr.isupper() and strlst[i] not in keybox:
keybox.extend([strlst[i],i])
else:
continue
else:
continue
'''
#计算正确,单个字符计算,代码较长
for x in range(i-1,i-4,-1):
if strlst[x].isalpha() and strlst[x].isupper():
prebig = True
else:
prebig = False
break
if prebig != True:
continue
else:
for x in range(i+1,i+4):
if strlst[x].isalpha() and strlst[x].isupper():
endbig = True
else:
endbig = False
break
if endbig:
keybox.extend(strlst[i])
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[i],'=',strlst[i-3:i],' ',strlst[i],' ',strlst[i+1:i+4],end=' ; ')
a += 1
if a % 3 ==0:
print('\n')
|
|