零基础学习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

