零基础学习Python 作业 第20章????

 

 

 

0 如果希望在函数中修改全局变量, 应该使用什么关键字?

 

global   举例:

count = 5
def MyFun():
global count
count = 10
print(count)
MyFun()
print(count)

10
10

1 在嵌套的函数中,如果希望在内部函数中修改外部函数的局部变量,应该使用什么关键字?

nonlocal(非局部的)

 

 

2 Python的函数可以嵌套,但要注意访问的作用域问题,请问以下代码存在什么问题?

def outside():
print('I am outside!')
def inside():
print('I am inside!')
inside()

无法访问内部的嵌套函数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()

funOut()
def funOut():
def funIn():
print('bingo!你成功访问我啦!')

return funIn
funOut()()


6 以下是“闭包”的一个例子,请你目测会打印什么内容?

def funX():
x = 5
def funY():
nonlocal x
x += 1
return x
return funY

a = funX()
print(a())
print(a())
print(a())








0 请用已经学过的知识编写程序,统计下面这个长字符串中各个字符出现的次数, 
并找到小甲鱼送给大家的一句话。
1 str1 = '''Oh Good! If you like this,
2 Please give me enough money.
3 I think you are nice boy!'''
4  
5 list1 = []
6  
7 for each in str1:
8     if each not in list1:
9         if each == '\n':
10             print('\\n', str1.count(each))
11         else:
12             print(each, str1.count(each))
13  
14         list1.append(each)
15  
16 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 += 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

 

 



posted @ 2018-10-23 16:34  蘑菇慢慢  阅读(281)  评论(0)    收藏  举报