零基础学习Python 作业 第20章
2018-03-15 22:30
477 查看
============ CH20 homework ============
0 如果希望在函数中修改全局变量, 应该使用什么关键字?
Answer: global
1 在嵌套的函数中,如果希望在内部函数中修改外部函数的局部变量,应该使用什么关键字?
Answer: nonlocal
2 Python的函数可以嵌套,但要注意访问的作用域问题,请问以下代码存在什么问题?
Answer: 无法访问内部的嵌套函数inside(), 如果要访问, 这么写outside()
3 请问为什么代码A没有报错, 但代码B却报错了?应该如何修改?
代码A
代码B
Answer: 疑问代码B中print(var), var 是外部变量被屏蔽,找不到,而代码A中能找到。
B中的找不到的原因,因为outside的var被当做外部非全局局部变量。
改造方法
4 请问如何访问funIn()呢?
Answer: funOut()
5 问如何访问funIn()呢?
Answer: funOut()()
6 以下是“闭包”的一个例子,请你目测会打印什么内容?
Answer:
6
7
8
并找到小甲鱼送给大家的一句话。
1 请用已经学过的知识编写程序,找出小甲鱼藏在下边这个字符串中的密码,
密码埋藏点符合以下规律:
a) 每位密码为单个小写字母
b) 每位密码的左右两边均有有且只有三个大写字母
0 如果希望在函数中修改全局变量, 应该使用什么关键字?
Answer: global
1 在嵌套的函数中,如果希望在内部函数中修改外部函数的局部变量,应该使用什么关键字?
Answer: nonlocal
2 Python的函数可以嵌套,但要注意访问的作用域问题,请问以下代码存在什么问题?
def outside(): print('I am outside!') def inside(): print('I am inside!) inside()
Answer: 无法访问内部的嵌套函数inside(), 如果要访问, 这么写outside()
3 请问为什么代码A没有报错, 但代码B却报错了?应该如何修改?
代码A
def outside(): var = 5 def inside(): var = 3 print(var) inside() outside()
代码B
def outside(): var = 5 def inside(): print(var) var = 3 inside() outside()
Answer: 疑问代码B中print(var), var 是外部变量被屏蔽,找不到,而代码A中能找到。
B中的找不到的原因,因为outside的var被当做外部非全局局部变量。
改造方法
def outside(): var = 5 def inside(): nonlocal var print(var) var = 3 inside() outside()
4 请问如何访问funIn()呢?
def funOut(): def funIn(): print('bingo!你成功访问我啦!') return funIn()
Answer: funOut()
5 问如何访问funIn()呢?
def funOut(): def funIn(): print('bingo!你成功访问我啦!') return funIn
Answer: funOut()()
6 以下是“闭包”的一个例子,请你目测会打印什么内容?
def funX(): x = 5 def funY(): nonlocal x x += 1 return x return funY a = funX() print(a()) print(a()) print(a())
Answer:
6
7
8
Practice
0 请用已经学过的知识编写程序,统计下面这个长字符串中各个字符出现的次数,并找到小甲鱼送给大家的一句话。
str1 = '''Oh Good! If you like this, Please give me enough money. I think you are nice boy!''' list1 = [] for each in str1: if each not in list1: if each == '\n': print('\\n', str1.count(each)) else: print(each, str1.count(each)) list1.append(each) print(list1)
1 请用已经学过的知识编写程序,找出小甲鱼藏在下边这个字符串中的密码,
密码埋藏点符合以下规律:
a) 每位密码为单个小写字母
b) 每位密码的左右两边均有有且只有三个大写字母
# 小甲鱼版本 # str = HonghuiSSKxUMB231JCCiTGZmn89KMLaYUIystrXWQoUUTjLMBiUYZaTYRhjhgUFDySADuYUIiSASsYYTsSHFbKLM def findKey(str1): # 大写字母计数 flagUp = 0 # 标记小写字母 flag = 0 # 计算小写字母后的大写字母 flagCount = 0 length = len(str1) for i in range(length): #if str1[i].isdigit(): # continue if str1[i] == '\n': continue if str1[i].isupper(): # 如果出现小写字母 flag = 1, 重置大写字母计数 # 这里说明已经满足前面的小写字母已经满足 if flag == 1: # 如果第一个是小写字母,接下来的是大写字母则开始计数 flagCount += 1 flagUp = 0 else: flagUp += 4000 1 continue if str1[i].islower() and flagUp == 3: flag = 1 flagUp = 0 target = i continue if str1[i].islower() and flagCount == 3: print(str1[target], end = ' ') flagUp = 0 flag = 0 flagCount = 0
# 我的版本(效率低下) def findKeyNew(str1): length = len(str1) add = 'aAaa' str2 = add + str1 + add leng = len(str2) # Test:print(str2) for i in range(4, leng-4): if str2[i] == '\n': continue if str2[i].islower(): strF = str2[(i-3) : i] strB = str2[(i+1) : (i+4)] if strF.isupper() and strB.isupper(): if str2[i-4].isupper(): continue elif str2[i+4].isupper(): continue else: print(str2[i], end = ' ') # Result # >>> str2 = 'sKKKyUUUoIIIuHHHaSSSaSSSMkMMMrAAAeXXXbEEEeQQQsAAAtXXX' # >>> findKeyNew(str2) # y o u a r e b e s t
相关文章推荐
- 零基础学习Python 作业 第10章
- 零基础学习Python 作业 第21章
- 零基础学习Python 作业 第23-24章
- 零基础学习Python 作业 第15章
- 零基础学习Python 作业 第30章
- 零基础学习Python 作业 第14章
- 零基础学习Python 作业 第6章
- 零基础学习Python 作业 第25章
- 零基础学习Python 作业 第26章
- 零基础学习Python 作业 第3章
- 零基础学习Python 作业 第9章
- 零基础学习Python 作业 第1章
- 零基础学习Python 作业 第7-8章
- 零基础学习Python 作业 第4章
- 零基础学习Python 作业 第16章
- 零基础学习Python 作业 第17章
- python基础学习小作业(一)
- 零基础学习Python 作业 第18章
- 零基础学习Python 作业 第2章
- 零基础学习Python 作业 第28章