学习小甲鱼Python入门(六)习题笔记-函数 第20课课后练习

局部变量和全局变量


def fun(var):
           var=1314
           print(var,end="...")
var=520
print(var)#这里的var是 全局变量外部的var=520
fun(var)#这里的var是函数局部变量  内部的 var=1314
print(var)#还是只能调用函数全局变量 外部的

var只有在函数体内或者和函数一起使用时,才调用局部变量

【函数 嵌套】可以这么叫吗,够呛
【看看执行什么】


def next():
           print('in next')
           pro()
def pro():
           print('in pro')
           
>>> next()
in next
in pro

【看看执行什么】
函数内部不能改变var=1314,不能改变var=520,520就是放第一句也是一样

def fun(var):
           var=1314
           print(var,end=' ')
var=520
fun(var)
print(var)
>>> 
= RESTART: C:/Users/Administrator/AppData/Local/Programs/Python/Python38-32/00.py
520 1314

【为什么出错】而加上 var=520 就能执行了

def fun(var):
           var=1314
           print(var,end='')
fun(var)

>>> 
Traceback (most recent call last):
  File "C:/Users/Administrator/AppData/Local/Programs/Python/Python38-32/00.py", line 4, in <module>
    fun(var)
NameError: name 'var' is not defined

【这样就好了】

var=1314
def fun(var):
           print(var)
fun(var)

【或是这样】

def a():
           return 1314
print(a())

python 中global的用法

Python中定义函数时,若想在函数内部对函数外的变量进行操作,就需要在函数内部声明其为global。

例子1
x = 1

def func():
x = 2

func()
print(x)
输出:1
在func函数中并未在x前面加global,所以func函数无法将x赋为2,无法改变x的值

例子2
x = 1

def func():
global x
x = 2

func()
print(x)
输出:2
加了global,则可以在函数内部对函数外的对象进行操作了,也可以改变它的值了

例子3
global x
x = 1

def func():
x = 2

func()
print(x)
输出:1

全局变量 局部变量 嵌套 例题

1)局部变量:函数里的变量
2)全局变量:在函数外的变量
注意:在函数里修改全局变量是无效的,python会新建与全局变量名字相同的局部变量
全局变量 global需要在函数内部声明,若在函数外声明,则函数依然无法操作x

var="hi "
def fun1():
           #global var#这句定义全局函数  意义何在?
           var='baby '
           return fun2(var)
def fun2(var):
           var=var+'i love you '
           #fun3(var) #这个意义何在?
           return var
def fun3(var):
           var='小甲鱼'
print(fun1())
print(fun2(var))
print(fun3(var))
 
>>> 
= RESTART: C:/Users/Administrator/AppData/Local/Programs/Python/Python38-32/00.py
baby i love you 
hi i love you 
None

函数执行过程是这样的。

1步:var = ’ Hi ’ 这里var是全局变量,定义了var的值是字符串’ Hi ’

2步:执行打印语句 print(fun1()) 打印内容是函数fun1()的返回值,调用函数fun1()

3步:进入函数fun1()中,global关键字把var在函数fun1()中,把全局变量var的值由 ’ Hi ‘ 修改为’ Baby ',返回函数fun2(var)的值,开始调用fun2(var)函数

4步:进入函数fun2()中,传入var的值’ Baby ‘,执行var+=‘I love you’ 即 var 在fun2()中是‘ Baby I love you’,

5步:执行fun3(var),调用fun3(var),传入参数var=’ Baby ‘,执行语句,在fun3(var)内,把var赋值为’小甲鱼’,返回值是None

6步:在fun2(var)中,返回var的值,即’ Baby I love you‘

7步:在fun1(var)中,返回fun2(var)的值,显示结果为 ’ Baby I love you’
————————————————
版权声明:本文为CSDN博主「拉风的DPC」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yishfd/article/details/73456355

统计出字符串的 字母 数字 空格 的个数

第 1 个字符串 含有: 数字= 3 字母= 7 空格= 3 其他= 1
第 2 个字符串 含有: 数字= 0 字母= 3 空格= 0 其他= 0


def 统计(*x):
#x='pyshell#1   24','abc'
           长度=len(x)
           for each in range(长度):#0和1
                      print('第',each+1,'个字符串','含有:',end=" ")
                      数字=0
                      字母=0
                      空格=0
                      其他字符=0
                      for i in x[each]:#0和1
                                 if i.isdigit():
                                            数字+=1
                                 elif i.isalpha():
                                            字母+=1
                                 elif i.isspace():
                                            空格+=1
                                 else:
                                            #print(x[i],end=" ")
                                            其他字符+=1
                      
                      print('数字=',数字,'字母=',字母,'空格=',空格,'其他=',其他字符)
#x=input('请你输入要统计的字符串(两个或两个以上请用“,”隔开):')
#统计(*x)
统计('pyshell#1   24','abc')

>>> = RESTART: C:/Users/Administrator/AppData/Local/Programs/Python/Python38-32/00.py
请你输入要统计的字符串(两个或两个以上请用“,”隔开):
= RESTART: C:/Users/Administrator/AppData/Local/Programs/Python/Python38-32/0.py
第 1 个字符串 含有: 数字= 3 字母= 7 空格= 3 其他= 1
第 2 个字符串 含有: 数字= 0 字母= 3 空格= 0 其他= 0

【input输入 不能分割的问题】
*【找到原因了,定义函数可以(prame),input却不能】
【不能】#x=input('请你输入要统计的字符串(两个或两个以上请用“,”隔开):')
【也不能】#统计(*x)
【只能】统计('pyshell#1 24','abc')
【↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓】


x=tuple(input('请你输入要统计的字符串(两个或两个以上请用“,”隔开):'))
print(len(x))

>>> 
= RESTART: C:/Users/Administrator/AppData/Local/Programs/Python/Python38-32/00.py
请你输入要统计的字符串(两个或两个以上请用“,”隔开):aaa,bbb
7

【↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑输出的是 7 而不是 2 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑】

嵌套 nonlocal global

global


var=5
def fun2():
           global var
           var*=var
           return var

nonlocal


def fun1():
           var=5
           def fun2():
                      nonlocal var
                      var*=var
                      return var
           return fun2()

闭包 运行一次加1的 函数

def funout():
           x=5
           def funin():
                      nonlocal x
                      x+=1
                      return x
           return funin    #(不能加括号,)
a=funout()

>>>==================================================
>>> print(a())
6
>>> print(a())
7

有些鱼油可能比较迷惑,局部变量x不是应该在每次调用的时候 被x=5初始化了吗? 其实 当 a=funout()的时候,只要a没有别重置,funout()就没有被释放,也就说局部变量x就没有被初始化 ,所以当全局变量不适用时候,可以考虑使用闭包更稳定和安全

从超长字符串中同个各个字符的次数

千行长字符串

str1="""%%$@_$^__#)
^)&!_+]!*@&^}{!
{_]%}$!){%^"""#两行字符串  用三个引号的目的是  忽略长字符中的个符号
list1=[]
for each in str1: #枚举
           if each not in list1:#归类
                      if each=='\n':#先找特殊的   回车 \n  统计多少行
                                 print('长字符串总共',str1.count(each)+1,'行')
                      else:
                                 print(each,str1.count(each))#统计每个字符出现的次数
                      list1.append(each)
>>> = RESTART: C:/Users/Administrator/AppData/Local/Programs/Python/Python38-32/000.py
% 4
$ 3
@ 2
_ 5
^ 4
# 1
) 3
长字符串总共 3& 2
! 4
+ 1
] 2
* 1
} 2
{ 3

根据条件 找出 密码 字符

规律:
1、每个密码为单独小写字母
2、每位密码的左右两边均有且只有三个大写字母

str1=''' @]$^#(BBBaCCC&&{){WWWcERd)_[}{@(}GGDwPDK#)!)%&
({+$[!#()[]%{$_*]
*^%&]@'''
list1=[]
for each in str1:
           if each.islower():
                      i=str1.find(each)
                      if str1[(i-3):i].isupper() and str1[(i+1):(i+4)].isupper() and (not str1[i-4].isupper()) and (not str1[i+4].isupper()):
                                 list1.append(each)
print(list1)
>>> = RESTART: C:/Users/Administrator/AppData/Local/Programs/Python/Python38-32/000.py
['a', 'w']
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值