Python数据变量和流程控制

Python数据变量和流程控制

2.1 数据类型

2.1.1 整数类型

Python用int来表示整数类型。

2.1.2 浮点数类型

浮点数也就是小数,因为浮点数的小数点位置是浮动可变的,浮点数除了数学写法,还支持科学计数法。浮点数也称为float型。

2.1.3 布尔类型

布尔值只有True、False两种值,对应计算机底层机器编码中的0和1。在Python中,可直接用True、False表示布尔值,也可以通过布尔计算计算出来。例如,3<5会产生布尔值True,而2==1会产生布尔值False。

2.1.4 复数类型

Python支持复数的直接表达形式,例如3+5j。

2.1.5 字符串类型

字符串是以单引号或双引号括起来的任意文本,而且可以书写成多行的形式,也就是三个单引号或双引号开头和结尾。

2.2 变量

2.2.1 命名规则

1)变量名由字母、数字和下划线构成,不能以数字开头。

2)大小写敏感,大写和小写是两个不同的变量。

3)不要跟关键字冲突

2.2.2 使用方法

赋值并不是直接将一个数值赋给一个变量,在Python中赋值是通过引用传递的,引用可理解为存储数值的内存地址,赋值的时候都是在描述该对象的引用赋值给变量。

type()可检查变量类型,然后用print函数输出到屏幕上。

Python可多重赋值和多元赋值。

x=y=z=1
print(x,y,z)//(1,1,1)
x,y,z=1,2,'hello,world'
print(x,y,z)//(1,2,'hello,world')

2.3 字符串和编码

2.3.1 字符串

字符串也是一种数据类型,可通过在引号间包含字符的方式创建字符串变量。

str1="world"
str2='hello'
print(str1,str2)//hello world
转义字符描述
\续行符
\\反斜杠符号
\’单引号
\"双引号
\b退格
\n换行
\v纵向制表符
\t横向制表符
\r回车
\f换页

使用双引号或单引号定义字符串时不可以换行,如果必须换行可以使用三重引号,在三重引号之间输入任何内容,在最后字符串会照单全收,包括换行、缩进等。

2.3.2 编码

字符集规定了某个文字对应的二进制数字存放方式(编码)和某串二进制数值代表了哪个文字(解码)的转换关系。

Python 3.x默认的字符编码是Unicode,默认的文件编码是UTF-8.

ASCII使用一个字节表示一个字符,而Unicode需要两个字节,这样对于英文文本而言存储空间就多出了一倍,于是就有了UTF-8,简称万国码,可以显示各种语言。利用Unicode的一个包含了全球所有国家语言编码的映射关系的功能,实现了编码转换,所以目前无论以什么编码存储的数据,只要我们的软件把数据从硬盘上读到内存,转成Unicode就可以正确显示出来。由于所有的系统编程语言都默认支持Unicode,所以我们的GBK编码软件放在美国的计算机上,加载到内存里面,变成了Unicode,中文就可以正常显示了。

2.3.3 字符串操作

1.切片操作

str1='Python从小白到大牛'
print(str1[0:6])//'Python'
print(str1[6:12])//'从小白到大牛'
print(str1[:6])//'Python'

2.字符串拼接

str1='Python'
str2='从小白到大牛'
print(str1+str2)//'Python从小白到大牛'
print(str1*5)//PythonPythonPythonPythonPython

3.字符串运算符

符号描述
+字符串连接
*重复输出字符串
[ ]通过索引获取字符中的字符
[:]字符串切片
in成员运算符
not in非成员运算符

4.字符串格式化

str1='Python'
print('%s从小白到大牛'%str1)//Python从小白到大牛

5.字符串内建函数

  • find()函数:可以在较长的字符串中查找某一个或几个字符,返回字符串所在位置的最左端索引,如果没有返回-1

  • split()函数:根据某个特定字符或符号来分割字符串,如果不提供分割符,默认空格为分割符

  • lower()函数:返回字符串的小写字母

  • upper()函数:将所有字母大写

  • title()函数:将字符串转换为标题,也就是单词首字母大写,其余小写。

  • replace()函数:返回某字符串的所有匹配项均被替换后得到的字符串

    print('This is a test'.replace('is','IS'))//'ThIS IS a test'
    
  • index()函数:从序列中查找某个元素的第一个匹配项的索引位置,没有找到就报错。

  • startswith()函数:判定字符串是否是以指定字符开头,返回布尔值,可以指定检测范围

  • strip()函数:用于移除字符串首位指定的字符,默认删除空格,lstrip()移除左侧,rstrip()移除右侧

2.4 数字和运算符

2.4.1 数和四则运算

数据有类型,变量无类型。第一,方便内存管理,第二,弱化了变量的类型声明。

2.4.2 关于数字的内建函数

除了加减乘除四则运算外,其他运算方法Python也能处理,但要实现需要Python中一个模块math。

2.5 列表

如果用简单的数字类型表达复杂的数据,就会存在大量简单数据对象,存放和管理这些对象成为问题,以列表为代表的容器数据类型解决复杂的数学问题。

2.5.1 List定义

park=['BMW','奔驰','大众','别克','路虎']
print(park)//['BMW','奔驰','大众','别克','路虎']
print(park[0],park[-2],park[1:-1],park[:2])//'宝马''别克'['奔驰','大众','别克']
print(park[:2]+['Ferrari','比亚迪'])//['宝马','奔驰','Ferrari','比亚迪']
park[2]='帕萨特'
print(park)//['宝马','奔驰','帕萨特','别克','路虎']
park=['宝马','奔驰']
park.insert(0,'Honda')
print(park)//['Honda','宝马','奔驰']
del park[0]
print(park)//['宝马','奔驰']

2.5.2 索引和切片

park[0:2]=['本田','丰田']
print(park)//['本田','丰田','帕萨特','别克','路虎']
park[0:2]=[]
print(park)//['帕萨特','别克','路虎']
park[1:1]=['马自达','jeep']
print(park)//['帕萨特','马自达','jeep','别克','路虎']

2.5.3 反转

list1=[1,2,3,4,5]
print(list(reversed(list1)))//[5,4,3,2,1]

2.8 从底层理解内存管理

Python内存管理是由私有堆空间管理的,可以理解为一块拥有连续编号的内存,所有对象和数据结构都存储在私有堆空间中。程序员没有访问这块内存空间的权限,只有解释器才有权访问。为Python的堆空间分配内存的是Python的内存管理模块,核心接口只会提供一些访问该模块的方法供程序员使用。

1.对象的内存使用

每个对象都存有指向该对象的变量总数,即引用计数

2.对象引用对象

列表可以包含多个元素或者对象,实际上列表包含的并不是对象本身,而是指向各个元素对象的内存地址引用。如果两个对象相互引用,就有可能构成所谓引用环,即使是一个对象,只要自己引用自己,也能构成引用环,但这会给垃圾回收机制带来很大麻烦。

3.引用减少

在一个列表中删除一个元素,引用对象的引用计数就有可能减少。如果这个变量指向别的内容时,引用计数也会减少。

4.垃圾回收

理论上说,当一个对象引用计数降为0的时候,说明没有任何引用指向对象,该对象就会清除。然而垃圾回收时,Python不能进行其他任务,频繁垃圾回收会大大降低Python工作效率。当Python运行时,会记录分配对象和取消分配对象的次数,两者的差值高于某个阈值时,垃圾回收才会启动。

Python作为一种动态类型语言,其对象和引用分离的机制,与面向过程的编程语言有很大区别。为了达到有效释放内存的目的,Python采用相对简单的垃圾回收机制,即引用计数。但这种机制会带来新问题——孤立引用环,涉及更复杂的垃圾回收算法。

3.1 条件语句

3.1.1 if-else

age=17
if age>=18:
    print("我们已经是成年人了")
else:
    print("我们是未成年人")
//我们是未成年人

3.1.2 if-elif-else

age=3
if age >=18:
    print("我们已经是成年人了")
elif age>=6:
    print("我们是未成年人")
else:
    print("我们是儿童")
//我们是儿童

3.1.3 if嵌套

proof=10
if proof < 20:
    print("驾驶员不构成酒驾")
else:
    if proof < 80:
        print("驾驶员已构成酒驾")
    else:
        print("驾驶员已构成醉驾")
//驾驶员不构成酒驾        

3.2 循环语句

3.2.1 while循环

sum=0
n=100
while n > 0:
    sum=sum+n
    n=n-1
print(sum)//5050    

3.2.2 for循环

result=0
for i in range(101):
    result+=i
print(result)//5050    
a_list=['Python','C','Java']
for ele in a_list:
    print("当前语言是:",ele)

3.2.3 循环嵌套

for i in range(1,10):
    for j in range(1,i+1):
        print('%d*%d=%d'%(i,j,i*j),end='\t')
    print()
//九九乘法表    

3.3 循环语句中的List解析

a=[n for n in range(1,100) if n%3==0]
print(a)
//3整除的结果

3.4 break和continue语句

i=0
while i<6:
    i+=1
    if i==4:
        break;
print(i)    
//1 2 3       
i=0
while i<6:
    i+=1
    if i==4:
        continue;
print(i)
//1 2 3 5 6 

3.6 初识算法

数据结构加上算法等于可执行程序。

算法可定义为在有限步骤内解决数学问题的程序。

例:如果a+b+c=1000,且a2+b2=c^2,求出所有a b c 的组合。

import time
start_time=time.time()
for a in range(0,1001):
    for b in range(0,1001):
        for c in range(0,1001):
            if a**2+b**2==c**2 and a+b+c==1000:
                print("a,b,c:%d,%d,%d"%(a,b,c))
end_time=time.time()
print(end_time-start_time)
//程序运行1285
import time
start_time=time.time()
for a in range(0,1001):
    for b in range(0,1001-a):
        c=1000-a-b
        if a**2+b**2==c**2:
            print("a,b,c:%d,%d,%d"%(a,b,c))
end_time=time.time()
print(end_time-start_time)
//程序运行16

对于算法的时间性质和空间性质,最重要的是其数量级和趋势,这些是算法效率的主要部分,而计量算法基本操作数量的规模函数中那些常量因子可以忽略不计。例如,可以认为3n2和100n2属于同一量级,如果两个算法处理同样规模实例的代价分别为这两个函数,就认为它们的效率差不多。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值