python基础学习笔记(二)

第十天:其他运算符

# s = 'lovesdchjdnksa'
# s = ['love',1,"dkdvnk"] #列表
s = ('love',333,"kjdoj") #元组
s = {1:'love','love':2334} #如果是字典,只能检测键,不能检测值
#如果指定序列在s中存在,则返回True,否则返回False
print('love' in s)  #存在
print('lovea' in s)
print('love' not in s)  #不存在
print('lovea' not in s)  #不存在

#id()函数 变量的 id属性获取,获取对象的内存地址
#is 判断两个标识符是否引自同一个对象
#is not 判断两个标识符不是引自同一个对象
#a和b值相同
a = 10
b = 10
print(id(a),id(b))
print(a is b)
#a和b值不同
a = 10
b = 11
print(id(a), id(b))
print(a is b)  #a是b
print(a is not b) #a不是b

第十一天:流程控制:顺序结构、分支结构和循环结构

一、分支结构:单向结构,双向结构 多向结构

a = True
if a:
    print('您好')
else:
    print('滚')

#多向分支
score = 50
if score >=0 and score <=60:
    print('不准吃饭')
elif score >60 and score <=90:
    print('继续进步')
elif score > 90 and score <=100:
    print("很棒")

#巢状分支(嵌套分支)
'''
if 表达式1:
    print()
    if 表达式2:
        if 表达式3:
        ....
        else:
            print()
    else:
        print()
else:
    print()

'''

pass #在代码块儿中专用于占位

二、十二生肖

#子鼠 丑牛、寅虎、卯兔、辰龙、巳蛇、午马、未羊、申猴、酉鸡、戌狗、亥猪
#input() 输入
# year = input('请输入年份')
year = int(input('请输入年份'))  #强制转换
print(year,type(year))

if year %12 == 4:
    print(f'{year}年是 ==> 子鼠')
elif year %12 == 5:
    print(f'{year}年是 ==> 丑牛')
elif year %12 == 6:
    print(f'{year}年是 ==> 寅虎')
elif year %12 == 7:
    print(f'{year}年是 ==> 卯兔')
elif year %12 == 8:
    print(f'{year}年是 ==> 辰龙')
elif year %12 == 9:
    print(f'{year}年是 ==> 巳蛇')
elif year %12 == 10:
    print(f'{year}年是 ==> 午马')
elif year %12 == 11:
    print(f'{year}年是 ==> 未羊')
elif year % 12 == 0:
    print(f'{year}年是 ==> 申猴')
elif year % 12 == 1:
    print(f'{year}年是 ==> 酉鸡')
elif year % 12 == 2:
    print(f'{year}年是 ==> 戌狗')
elif year % 12 == 3:
    print(f'{year}年是 ==> 亥猪')

#程序简化:列表
year1 = int(input('请输入年份'))  # 强制转换
n = year1 % 12
varlist = ['申猴','酉鸡','戌狗','亥猪','子鼠' ,'丑牛','寅虎','卯兔','辰龙','巳蛇','午马','未羊']
print(f'{year}年是 ==>',varlist[n])

第十二天:循环结构

一、while循环

num = 1
while num <= 10:
    print(num)
    num += 1

#for循环
vars = 'dhuisn'
for i in vars:
    print(i)

#1.break 语句 结束,跳出循环结构,在c语言中只能跳出一层循环
#2.contine 语句 跳过本次循环,继续执行下一次循环
#3.pass 语句 占位

#4.exit()和quit() 是用于结束当前python解释器的程序的,
# 而break和continue是用来控制程序的

二、for循环

#range是一个函数,返回一个可迭代的对象

for i in range(1,10):
    print(i)

#流程控制练习题:循环输出十行十列*,隔行换色,隔列换色

a = 1
while a <= 100:
# for i in range(1,10):
    print('*',end=" ") #end控制换行,换行为空,则表示不换行
    if a % 10 == 0:
        print()  #print表示换行
    a += 1

第十三天:九九乘法表

'''
1x1=1 
2x1=2 2x2=4 
3x1=3 3x2=6 3x3=9 
4x1=4 4x2=8 4x3=12 4x4=16 
5x1=5 5x2=10 5x3=15 5x4=20 5x5=25 
6x1=6 6x2=12 6x3=18 6x4=24 6x5=30 6x6=36 
7x1=7 7x2=14 7x3=21 7x4=28 7x5=35 7x6=42 7x7=49 
8x1=8 8x2=16 8x3=24 8x4=32 8x5=40 8x6=48 8x7=56 8x8=64 
9x1=9 9x2=18 9x3=27 9x4=36 9x5=45 9x6=54 9x7=63 9x8=72 9x9=81 
'''

一、九九乘法表正向输出

# 第一层循环
for x in range(1,10):
    #内循环
    for y in range(1,x+1):
        print(f'{x}x{y}={x*y}',end=' ') #end以空格结束每次输出
    print()#控制换行作用

print()  # 控制换行作用

a = 1
b = 1
while a <= 9:
    while b <= a:
        print(f'{a}x{b}={a * b}', end=' ')  # end以空格结束每次输出
        b += 1
    print()  # 控制换行作用
    a += 1
    b = 1

print()  # 控制换行作用

二、反向输出9x9乘法表

'''
9x1=9 9x2=18 9x3=27 9x4=36 9x5=45 9x6=54 9x7=63 9x8=72 9x9=81 
8x1=8 8x2=16 8x3=24 8x4=32 8x5=40 8x6=48 8x7=56 8x8=64 
7x1=7 7x2=14 7x3=21 7x4=28 7x5=35 7x6=42 7x7=49 
6x1=6 6x2=12 6x3=18 6x4=24 6x5=30 6x6=36 
5x1=5 5x2=10 5x3=15 5x4=20 5x5=25 
4x1=4 4x2=8 4x3=12 4x4=16 
3x1=3 3x2=6 3x3=9 
2x1=2 2x2=4 
1x1=1 
'''

# 第一层循环
for x in range(1,10):
    #内循环
    for y in range(1,10-x+1):
        print(f'{10-x}x{y}={(10-x)*y}',end=' ') #end以空格结束每次输出
    print()#控制换行作用

第十四天:斐波拉切数列

#获取用户数据
num = int(input('你需要输入几项?'))
n1 = 0
n2 = 1
count = 2 #标志位
# 从此之后的数字开始计算
if num <= 0:
    print('请输入一个正数')
elif num == 1:
    print(f'斐波拉切数列:{n1}')
else:
    print(f'斐波拉切数列:{n1},{n2}',end=',')  #行结尾是逗号,不换行
    while count < num:
        n3 = n1 + n2
        print(n3,end=',')
        n1,n2 = n2,n3 #递推
        count += 1

第十五天:百钱买百鸡

'''
100元买100只鸡
公鸡 ==> 3元 == 33只
母鸡 ==> 1元 == 100只
小鸡 ==> 0.5元 == 200只
问:总共存在多少种方案?
'''
#第一种方法
count = 0
num = 1
for gj in range(0,34):
    for mj in range(0,101):
        for xj in range(0,201):
            #判断是否为100只,是否花费100元
            if gj+mj+xj == 100 and gj*3 + mj + xj*0.5 == 100:
                print(f'第{num}种方案:公鸡{gj}只,母鸡{mj}只,小鸡{xj}只,花费{gj*3 + mj + xj*0.5}元')
                num += 1
            count += 1
print(f'总共方案{num-1}种')
print(count)

# 第二种方法
count = 0
num = 1
for gj in range(0, 34):
    for mj in range(0, 101):
        xj = 100 - gj - mj
        # 判断是否为100只,是否花费100元
        if gj + mj + xj == 100 and gj * 3 + mj + xj * 0.5 == 100:
            print(f'第{num}种方案:公鸡{gj}只,母鸡{mj}只,小鸡{xj}只,花费{gj * 3 + mj + xj * 0.5}元')
            num += 1
        count += 1
print(f'总共方案{num - 1}种')
print(count)

第十六天:认识函数

一、函数的定义

'''
function 函数或者功能
函数的定义和使用
def 函数名([参数列表]):  #可以不要参数,空参数也行
    当前函数的具体功能代码
    当前函数的具体功能代码
    。。。。。。
1、函数的封装完并不会执行,只是把函数定义了而已
2、如果想使用定义了的函数,那么就需要语法来实现函数的调用
3、函数定义后,不调用不执行
4、不能在函数定义之前调用函数
5、函数命名要遵守命名规范
    字母数字下划线,不能以数字开头
    严格区分大小写,不能使用关键字
    命名最好有意义,且不要使用中文
6、函数名不要冲突,否则会被覆盖

7、函数的调用:
    函数名()
'''

二、关于函数的参数

####- 函数定义时,可以在参数列表中定义 形参
####- 如果函数有形参,那么在调用时必须传递参数(实参)
####- 实参在传递过程中,本质上就是变量的赋值运算
####- 函数定义了n个形参,那么在调用时就必须指定按顺序传递n个实参

三、函数中的参数类型:普通参数,默认参数,收集参数,命名关键字参数,关键字参数收集

1、普通参数,就是位置参数,也叫顺序参数,也是必须传递的参数
2、函数给定默认参数,调用重新给定实参,则覆盖原有默认参数
3、收集参数(加*号):定义一个形参,专门收集多余的实参 或者理解为不确定的需要传递多少个实参,直接用一个形参来接收
    在定义函数时,如果需要收集参数,那么这个形参前面需要加一个*号,例如:*args,来接收多余的参数,
    多余的参数会存储在args元组中   
'''
def func(x='+', *args):
    print(type(args))
    if x == '+':
        print('加法运算',args)
    else:
        print('减法运算',args)
# 函数调用
func('-',200,300,100)

'''
4、命名关键字参数:
    关键字参数定义在收集参数之后,
    关键字参数必须通过形参的名字来进行传递
'''
def love(a,b,c=3,*args,name):
    print(a,b,c)
    print(args)
    print(name)
#命名关键字调用:在调用时,必须按照形参的名字来进行传递
love(1,2,3,4,5,6,7,8,9,0,name='nameddd')

'''
5、关键字参数收集
'''
def love(a,b,c=3,*args,name,age,**kwargs):
    print(a,b,c)
    print(args)  #普通收集参数,会把多余的参数收集成为 一个元组
    print(kwargs) #关键字参数收集,会把多余的关键字参数收集为 字典

love(1,2,3,112,123,name='aaa',age=222,sex = 'ccc',aa = 'aa111',bb='b333b')

###注意形参声明的位置
#必须按照的定义顺序:普通参数,默认参数,收集参数,关键字参数,关键字收集参数
#例如:love(a,b,c=3,*args,name,age,**kwargs)
#极少数情况下出现上面五种形参
#一般情况下出现:普通参数,收集参数,关键字收集参数

第十七天:

'''
函数分为两类:
    1、执行过程函数:函数体内完成一定的功能,没有返回值,但是返回一个“None”
    None是一个特殊的数据类型
    2、具有返回值的函数:函数体内完成一定的功能,并且返回一个结果到函数调用处
'''

一、return 返回值关键字

#如果如果需要在函数中指定返回的内容,可以使用 return 关键字
#return必须定义在函数最后一行,因为执行完return语句后的语句就再在执行了
def love(a,b):
    res = f'{a} i love you {b}'
    #可以在函数体内,使用return返回任何内容
    return res
#函数调用
r = love('狼','羊')
print(r)

二、函数中变量的作用域

'''
定义:变量的有效范围
全局变量:在函数内、外都可以使用的变量
    在函数内部使用 global 定义的变量,就是全局变量,函数内外都可以使用
    在函数外定义的变量,在函数内使用关键字 global 关键字进行声明,那么也是全局变量
数据类型分为两种:
    可变数据类型:在函数外定义的变量,在函数内可以使用(列表和字典)
    不可变数据类型:在函数外定义的变量,在函数内只能访问,不能够使用其它操作(其他类型)
'''
num = 10

varlist = [1,2,3]
vardict = {'a':'a','b':'b'}

def func():

    global nun
    nun = 12
    print(nun)
    print(num) #在函数内可以获取函数外部的变量
    nun += 20  #在函数内部不能直接更改函数外的变量,这条语句会报错
    print(nun)
    love = 20
    love += 1
    print(love)
    print(varlist)
    varlist[2] = 'aa'  #函数外部定义的变量可以改变
    print(vardict)
    vardict['a'] = 'aa' #函数外部定义的变量可以改变
    global live  #函数内部定义全局变量
    live = 'iloveyou'
    print(live)

    # 在函数内部使用
    globals()  # 获取还是全局数据
    print(globals())
    locals()  # 获取当前作用域(函数内部作用域)的数据
    print(locals())

func()
print(love) #函数内定义的局部变量,函数外不能使用
#<function main.<locals>.love at 0x000002718CCC8678>

print(varlist)
print(vardict)
print(live)
print(nun)

三、在函数外使用

globals()#获取全局数据
print(globals())
locals()#获取当前作用域的数据
print(locals())
#问:为什么上面两个函数作用域的结果一模一样:因为当前的区域是全局区域

四、不光变量有作用域,函数一样也有作用域

def outer():
    print('This is outer function...')
    abc = 123
    #函数内部定义的函数,成为 局部函数,函数外无法使用
    def inner():
        global abc
        print('This is inner function...')
        print(abc) #局部函数可以调用abc
        abc += 1  #局部函数不能操作abc
        print(abc)

    inner()

outer()

第十八天:

- 函数和变量都有作用域

- 在函数内部如何使用上一层函数中的局部变量?

- 答:需要使用nonlocal关键字引用

def outer():
    '''
    这里是让你写当前函数的文档说明的。
    需要说明当前函数的作用,
    如果当前函数还有形参,那么也需要对形参进行一一说明
    name:这个是一个name参数,有什么用。。。
    age:这个表示当前的一个年龄
    :return: 此处说明函数的返回值。。。
    '''

    num = 10
    # 内函数,局部函数,在函数内部定义的函数
    def inner():
        # nonlocal在局部函数中使用,
        nonlocal num  #可以引用函数中定义的局部变量,但依然不能提升为全局变量
        num +=1
        print(num)

    inner()
    # print(num)
outer()

关于函数中的文档

print(globals())

print(__name__)
print(__doc__)
print(outer.__doc__) #获取某一个函数的说明文档
'''
魔术变量
__name__  ==> 当前脚本如果作为主程序,那么值是 __mian__,如果是当做一个模块,在另一个脚本中引用去使用,那么值就是当前文件的名字
__doc__ ==> 当前脚本的文档说明,在当前脚本中的第一个 三引号注释就是当前脚本的说明文档
{
'__name__': '__main__',
 '__doc__': '\n@author: TQF\n@contact: 1127439518@qq.com\n@software: PyCharm\n@file: 20.nonlocal关键字.py\n@time: 2022/1/22 10:54\n', 
 '__package__': None, 
 '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000001994B9E1A88>,
  '__spec__': None,
   '__annotations__': {}, 
   '__builtins__': <module 'builtins' (built-in)>, 
   '__file__': 'F:/pyDM/untitled1/20.nonlocal关键字.py',
    '__cached__': None, 'main': <function main at 0x000001994BA385E8>
    }    
'''
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值