Python补充知识2

回顾

重点:一切皆对象

难点:不可变对象和可变对象

例子:分析:元组是可变对象,所以改变其中的某一个,其他都跟着改变

a = 100
b = a
b = b+1
print(a)
print(b)

a1 = [1,2,3]
b1 = a1
b1.append(4)
print(a1)
print(b1)
c1 = a1
c1.append(5)
print(a1)
print(b1)
print(c1)

结果:

100
101
[1, 2, 3, 4]
[1, 2, 3, 4]
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]

1、input输入,不论输入什么都会是str形式

a = input("请输入一个整数:")
print(a)
print(type(a))
结果如下:

请输入一个整数:1
1
<class 'str'>

2、选择结构

  • 分为单分支、双分支和多分支
  • 条件为假:
    • false
    • 空字符串“”
    • 0、[]、()、{}

3、可迭代对象(iterable)

  • 系列,例如字符串(str)、列表(list)、元组(tuple)
  • 字典
  • 文件对象
  • 迭代器对象
  • 生成器函数

4、break提前结束循环

结束本次循环,即跳出循环体内自continue下面尚未执行的语句,返回到循环的起始处,并根据循环条件判断是否执行下一次循环

continue语句与break语句的区别

continue语句仅结束本次循环,并返回到循环的起始处,循环条件满足的话就开始执行下一次循环

而break语句则是结束循环,跳转到循环的后继语句执行

i=1
while(i<10):
    print(i)
    i = i+1
    if(i==5):
        break
else:
    print("这是else")
    
    break会跳出else

continue语句实战

【例3.15】使用continue语句跳过循环。要求输入若干学生成绩(按Q或q结束),如果成绩<0,则重新输入。统计学生人数和平均成绩

num = 0;scores=0#初始化学生人数和成绩和
while True:
    s = input("请输入学生成绩(按Q或者q结束):")
    if s.upper()=='Q':
        break
    if float(s)<0:
        continue
    num+=1#统计学生人数
    scores+=float(s)#计算成绩之和
print('学生人数:',num);print('平均成绩为:',scores/num)

在这里插入图片描述

5、Python format格式化函数

Python2.6之后才有的格式化字符串的函数,str.format(),它增强了字符串格式化的功能,基本语法就是通过{}:来替代以前的 %

format函数可以接受不限个参数,位置可以不按顺序。

print(str.format("{0:<5}",i), end="")     #每个数占5个位置,不足后面加空格,并且不换行

实战

print("{} {}".format("hello","world"))#不设置指定位置,按默认顺序

print("{0},{1}".format("hello","world"))#设置指定位置
print("{1},{1},{0}".format("hello","world"))

print("网站名:{name},地址:{url}".format(name="未晞~",url="www.baidu.com"))

# 通过字典设置参数
site = {"name":"未晞~","url":"www.baidu.com"}
print("网络名:{name},地址{url}".format(**site))

# 通过列表索引设置参数
my_list = ['未晞~','www.baidu.com']
print("网络名:{0[0]},地址{0[1]}".format(my_list))#"0"是必须的
hello world
hello,world
world,world,hello
网站名:未晞~,地址:www.baidu.com
网络名:未晞~,地址www.baidu.com
网络名:未晞~,地址www.baidu.com

注:

*b这个位置可以接收任意多个(也可以是0个)非关键字参数,并将其打包成元组。

**b这个位置可以接收任意多个(也可以是0个)关键字参数,并将收集到的参数转换成一个字典。

6、典型代码

6.1、单分支结构实例

一、# 单分支结构:输入两个数a和b,比较两者大小,使得a>b
a = int(input("请输入第一个整数:"))
b = int(input("请输入第二个整数:"))

print(str.format("输入值:{0},{1}",a,b))
if(a<b):
    t=a
    a=b
    b=t
    print(str.format("降序值:{0},{1}",a,b))

在这里插入图片描述

6.2、while循环实例

在这里插入图片描述

# 用如下近似公式求自然对数的底数e的值,直到最后一项的绝对值小于10-6为止

i = 1;e = 1;t = 1
while(1/t>=pow(10,-6)):
    t*=i
    e+=1/t
    i+=1
print("e=",e)

程序运行结果如下图:在这里插入图片描述

6.3、典型代码

在这里插入图片描述

7、选择语句实战——判断闰年

import calendar

year = int(input())
print("=======================使用一个逻辑表达式包含所有的闰年条件=========================")
if((year%4==0 and year%100!=0) or year % 400==0):
    print("是闰年")
else:
    print("不是闰年")
print("==============使用嵌套的if语句==========================")
if(year%400==0):print("是闰年")
else:
    if(year%4==0):
        if(year%100==0):
            print("是闰年")
        else:print("不是闰年")

print("==================使用if-elif语句=======================")
if(year%400==0):print("是闰年")
elif(year%4!=0):print("不是闰年")
elif(year%100==0):print("不是闰年")
else:print("是闰年")

print("=======================使用calendar模块的isleap函数判断闰年====================")
if(calendar.isleap(year)):print("是闰年")
else:print("不是闰年")

答案

2000
=使用一个逻辑表达式包含所有的闰年条件===
是闰年
使用嵌套的if语句============
是闰年
使用if-elif语句=====
是闰年
===使用calendar模块的isleap函数判断闰年
是闰年

八、九九乘法表(最全三角)

第一种,左下三角

for i in range(1,10):
    s = ""
    for j in range(1,i+1):
        s +=str.format("{0:1}*{1:1}={2:<4}",i,j,i*j)
    print(s)

程序运行结果如下:

1*1=1   
2*1=2   2*2=4   
3*1=3   3*2=6   3*3=9   
4*1=4   4*2=8   4*3=12  4*4=16  
5*1=5   5*2=10  5*3=15  5*4=20  5*5=25  
6*1=6   6*2=12  6*3=18  6*4=24  6*5=30  6*6=36  
7*1=7   7*2=14  7*3=21  7*4=28  7*5=35  7*6=42  7*7=49  
8*1=8   8*2=16  8*3=24  8*4=32  8*5=40  8*6=48  8*7=56  8*8=64  
9*1=9   9*2=18  9*3=27  9*4=36  9*5=45  9*6=54  9*7=63  9*8=72  9*9=81  

第二种,左上三角

for i in  range(1,i):
    s= " "
    for j in range(i,10):
        s+=str.format("{0:1}*{1:1}={2:<4}",i,j,i*j)
    print(s)

程序运行结果如下:

 1*1=1   1*2=2   1*3=3   1*4=4   1*5=5   1*6=6   1*7=7   1*8=8   1*9=9   
 2*2=4   2*3=6   2*4=8   2*5=10  2*6=12  2*7=14  2*8=16  2*9=18  
 3*3=9   3*4=12  3*5=15  3*6=18  3*7=21  3*8=24  3*9=27  
 4*4=16  4*5=20  4*6=24  4*7=28  4*8=32  4*9=36  
 5*5=25  5*6=30  5*7=35  5*8=40  5*9=45  
 6*6=36  6*7=42  6*8=48  6*9=54  
 7*7=49  7*8=56  7*9=63  
 8*8=64  8*9=72  

第三种,右上三角

for i in range(1,10):
    s = " "
    for j in range(1,i):
        print(end="        ")
    for k in range(i,10):
        s+=str.format("{0:1}*{1:1}={2:<4}",i,k,i*k)
    print(s)

程序运行结果如下:

 1*1=1   1*2=2   1*3=3   1*4=4   1*5=5   1*6=6   1*7=7   1*8=8   1*9=9   
         2*2=4   2*3=6   2*4=8   2*5=10  2*6=12  2*7=14  2*8=16  2*9=18  
                 3*3=9   3*4=12  3*5=15  3*6=18  3*7=21  3*8=24  3*9=27  
                         4*4=16  4*5=20  4*6=24  4*7=28  4*8=32  4*9=36  
                                 5*5=25  5*6=30  5*7=35  5*8=40  5*9=45  
                                         6*6=36  6*7=42  6*8=48  6*9=54  
                                                 7*7=49  7*8=56  7*9=63  
                                                         8*8=64  8*9=72  
                                                                 9*9=81  

第四种 右下三角

for i in range(1,10):
    s=" "
    for j in range(1,10-i):
        print(end="        ")
    for k in range(1,i+1):
        s+=str.format("{0:1}*{1:1}={2:<4}",i,k,i*k)
    print(s)

运行结果如下:

                                                                 1*1=1   
                                                         2*1=2   2*2=4   
                                                 3*1=3   3*2=6   3*3=9   
                                         4*1=4   4*2=8   4*3=12  4*4=16  
                                 5*1=5   5*2=10  5*3=15  5*4=20  5*5=25  
                         6*1=6   6*2=12  6*3=18  6*4=24  6*5=30  6*6=36  
                 7*1=7   7*2=14  7*3=21  7*4=28  7*5=35  7*6=42  7*7=49  
         8*1=8   8*2=16  8*3=24  8*4=32  8*5=40  8*6=48  8*7=56  8*8=64  
 9*1=9   9*2=18  9*3=27  9*4=36  9*5=45  9*6=54  9*7=63  9*8=72  9*9=81 

矩阵三角

for i in range(1,10):
    s=""
    for j in range(1,10):
        s+=str.format("{0:1}*{1:1}={2:<4}",i,j,i*j,end="\t")
    print(s)

程序运行结果如下

1*1=1   1*2=2   1*3=3   1*4=4   1*5=5   1*6=6   1*7=7   1*8=8   1*9=9   
2*1=2   2*2=4   2*3=6   2*4=8   2*5=10  2*6=12  2*7=14  2*8=16  2*9=18  
3*1=3   3*2=6   3*3=9   3*4=12  3*5=15  3*6=18  3*7=21  3*8=24  3*9=27  
4*1=4   4*2=8   4*3=12  4*4=16  4*5=20  4*6=24  4*7=28  4*8=32  4*9=36  
5*1=5   5*2=10  5*3=15  5*4=20  5*5=25  5*6=30  5*7=35  5*8=40  5*9=45  
6*1=6   6*2=12  6*3=18  6*4=24  6*5=30  6*6=36  6*7=42  6*8=48  6*9=54  
7*1=7   7*2=14  7*3=21  7*4=28  7*5=35  7*6=42  7*7=49  7*8=56  7*9=63  
8*1=8   8*2=16  8*3=24  8*4=32  8*5=40  8*6=48  8*7=56  8*8=64  8*9=72  
9*1=9   9*2=18  9*3=27  9*4=36  9*5=45  9*6=54  9*7=63  9*8=72  9*9=81  

九、Python内置数据类型概述

Python语言中,一切皆为对象,而每个对象都属于某个数据类型

Python的数据类型包括内置的数据类型、模块中定义的数据类型和用户自定义的类型

数值数据类型: int、bool、float、complex

序列数据类型: 不可变(str、tuple、bytes)和可变(list、bytearray)

集合数据类型: set、frozenset字典数据类型:dict。例如:{1: “one”, 2: “two”}

NoneType、NotImplementedType和EllipsisType

math.fabs()与abs()区别

Pythonfabs (x) 方法返回 x 的绝对值。

虽然类似于 abs () 函数,但是两个函数之间存在以下差异: abs () 是一个内置函数,而 fabs () 在 math 模块中定义的。

fabs () 函数只适用于 float 和 integer 类型,而 abs () 也适用于复数。

十、zip函数和循环

zip()函数 将多个可迭代的对象中对应的元素打包成一个个元组,然后返回一个由这些元组组成的列表。如果元素个数不一致,则返回列表长度与最短的对象相同。

利用于运算符*,还可以实现将元祖解压为列表

x = [1,2,3]
y = [3,4,5]
zip(x,y)
print(zip(x,y))#<zip object at 0x000001AC42957A00>
list(zip(x,y))
print(list(zip(x,y)))#[(1, 3), (2, 4), (3, 5)]
a,b = zip(*zip(x,y))
print(a,b)#(1, 2, 3) (3, 4, 5)
# zip函数和并行循环
evens = [0,2,4,6,8]
odds = [1,3,5,7,9]
for e,o in zip(evens,odds):
    print("{0}*{1}={2}".format(e,0,e*o))

程序运行结果如下图:

在这里插入图片描述

十一、map()函数和循环

如果需要遍历可迭代对象,并使用指定函数处理对应的元素,则可以使用Python的内置函数map()。

map(func,seq[,seq2,…])函数将func作用于seq中的每一个元素,并将所有的调用结果作为可迭代对象返回。如果func为None,该函数的作用等同于zip()函数。

例如,如果要返回列表中的每个字符串的长度,可以使用内置的map()函数和len()函数。

print(map(len,['Spring','Summer','Fall','Winter']))
print(list(map(len,['Spring','Summer','Fall','Winter'])))

运行结果如下:

<map object at 0x000002A578BA7310>
[6, 6, 4, 6]

实战

# 例子
print(list(map(abs,[-1,1,2,-7])))#计算绝对值,输出:[1, 1, 2, 7]
print(list(map(pow, range(5),range(5))))#计算乘幂,几的几次方,输出:[1, 1, 4, 27, 256]
print(list(map(ord,'abcdef')))#计算ASCII码,输出:[97, 98, 99, 100, 101, 102]
print(list(map(lambda x,y:x+y,'abc','de')))#字符串拼接,输出:['ad', 'be']

十二、enumerate

Python语言的for循环直接迭代对象集合中的元素,如果需要在循环中使用索引下标访问集合元素,则可以使用内置的enumerate()函数。

enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。

print(list(enumerate(["a","b","c"])))
print(list(enumerate(["a","b","c"],10)))
程序运行结果如下:
[(0, 'a'), (1, 'b'), (2, 'c')]
[(10, 'a'), (11, 'b'), (12, 'c')]
语法:enumerate(sequence, [start=0])
参数
  • sequence – 一个序列、迭代器或其他支持迭代对象。
  • start – 下标起始位置的值。
返回值

返回 enumerate(枚举) 对象。

十三、lambda

lambda a,b :a+b #匿名函数,lambda表达式
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值