python数据类型和循环控制

xiaoxiao2021-02-28  114

变量

变量名 = 变量值  # = 绑定;变量名(标识符)映射变量值,当定义一个变量时,解释器开辟一块儿内存空间,存入变量的值。也可以说,变量名指向值在内存中的地址。

内存回收

没有绑定关系的变量值被回收,即值的引用计数器为0时,python解释器会自动回收该值。当变量名绑定新的值时,原来的值无绑定,被回收。一个值可以绑定多个变量名del 变量名  # 解除绑定id(变量名)  # 查看变量绑定值所在的内存地址的id号比较短的值,像小整数,占用的内存空间小,python解释器会将它们缓存在内存中,一旦再有变量被赋值为小整数,就可以直接引用。比较长的值,不会缓存在内存中,每次定义一个变量,都会开辟新的内存空间。

输入输出

input()  # 括号内可以写提示信息。在python3中,默认所有的输入被转为字符串。在python2中,用户输入什么类型就是什么类型,输入字符串时要加‘  ‘,告知input输入类型。python3中的input()《==相当于==》python2中的raw_input()。在windows命令行窗口中,可以通过import getpass 来输入用户密码时不显示密码 password = getpass.getpass('密码')type(变量)  # 显示变量类型print('......', abc) 与print('.....%s.....', abc)  # 使用%d(整数)、%f(浮点数)、%s(字符串)这些占位符,可以更灵活的打印变量

运算符

算术运算符:+、-、*、/、//(取整除)、**(幂的运算,e.g. 7**2表示7的2次幂)、%赋值运算:= 、+=、-、-=、*=、/=、%=、**=、//= 比较运算符:==、!=、>、>=、<、<=逻辑运算符:and、or、not 关系运算符:

文件头与注释

# -*- coding: utf-8 -*-   指定字符编码方式# 单行注释;''' '''多行注释

python中的数据类型:

即变量的值的类型:

数字类型:int、float、bool、复数(注意:python2中还有long lint,python3中int长度无限制) 科学计数法:e.g. 1.3e5 ------> 1.3 * 10^5bin(int): 转二进制;标识:0b oct(int): 转八进制;标识:0o hex(jbin): 转16进制;标识0x特性:一经定义,值不可更改(即,改变值必须改变内存地址);直接访问 字符串类型: ‘ ’‘ ’‘’ 三种引号引起来的都是字符串常用操作: x.strip() # 默认去空格,也可以去括号内指定的字符x.split() # 分割字符串为列表,默认以空格分割,具体可以根据字符串的特征选取分隔符' '.join(字符串列表) # 引号内可以指定连接符。x.isdigit() # 判断字符串是否是整数。可以用来判断用户输入是否符合要求 age = input('请输入年纪:') if age.isdigit(): age_new = int(age) #将用户输入的字符串转化为int ;如果不加判断的转化,一旦用户输入了非数字的字符串,那么int()转化将导致错误。 print(age_new, type(age_new)) 请输入年纪:20 20 <class 'int'> x.format() # 格式化字符串: string = 'a:{}, b:{}, c:{}' x = string.format(100, 90, 80) print(x)a:100, b:90, c:80 person = 'name:{x}, gender:{y}, age:{z}' x = person.format(x='tom',y='male',z='20') print(x)name:tom, gender:male, age:20 x.place() # 替换字符串。替换并不会改变原值,除非重新赋值 string = 'ich liebe das world' print(string.replace('das','die')) ich liebe die world x.startswith() #以括号内字符开头,判断真假x.endswith()  #以括号内字符结尾,判断真假x.find() # 查找,结果以index号显示x.index() # 显示字符串中某个字符的index号,配合切片使用x.[ : : ] # 切片  起始:结束:步长 s = 'das gerne ich, aber kann ich nicht' print(s[s.index('k')]) #找到字母k的索引号,然后用切片的方式打印出来 k x.count() # 计算括号内字符出现的次数x.capitalize() #首字母大写x.upper() # 所有字母大写x.lower() # 所有字母小写x.title() #标题,判断首字母是否大写,如果不是自动大写x.ljust()左对齐, 括号内指定缩进和填充符 s = 'als' print(s.ljust(10,'*')) als******* x.rjust() # 右对齐x.center() # 居中 s = 'als' print(s.center(10,'*')) ***als****

列表:逗号分隔多个元素,元素可以是任意类型 定义一个列表:l = [1, 'a', [3, 4]]   # l = list([1, 'a', [3, 4]])

取值 l[index], 同字符串,都是有序的遍历: 方法一:for i in l:方法二: count = 0 while count < len(l): print(l[count]) count += 1 l.append(元素) # 默认追加到最后面l.insert(index) # 插入括号内指定位置,默认插在最前面l.pop(index) # 括号内填入index, 指定要删除的元素;不加index,默认删除最后一个元素,相当于pop(-1)。另外,该命令有返回值:返回刚刚删除的值。队列与堆栈的模拟: 队列:先进先出:l.append()===>l.pop(0)  或 l.insert()====>l.pop() 堆栈:先进后出(后进先出):l.append()=====>l.pop() len(l) #统计队列长度l.index(元素)#查索引l.count(元素) #查元素的个数l.extend([列表]) # 合并列表。不同于append, 后者是把列表作为一个元素追加入原列表l.remove(元素) 删除元素,如果有多个重复元素,只删除第一个。(pop是按索引来删)l.sort() # 默认从小到大。排序不像pop有返回值l.sort(reverse = True) # 先按大小排序,再反转l.reverse()# 反转(没有比较大小的属性)包含(也适用于字符串):元素 in 列表中,返回True/False s = 'lena is smart' print('lena' in s) True

元组:有序,不可变。定义一个元组 t =(元素1,元素2,#元素可以是任意类型,所以可以嵌套列表,修改里面列表的元素)

t.count(元素) 计数t.index(元素)t[index] 索引t[::]切片、长度、包含 字典:d={key1:value1, key2:value2} key value用冒号分隔 key必须是不可变类型(数字、字母、元组、或者说可hash类型,hash() 括号内传入不可变对象,hash校验出一个值)。vaue可以是任意类型数据。字典的取值:d[key] 字典是无序的(no index)字典的修改:d[key] = value_new字典的循环:d.keys() 提取key d.values() 提取value迭代器遍历字典:这种方法不通过索引,对于列表,元组,字符串,将取出元素,对于字典,取出key for k in d: print(k, d(k)) d.get(key)  vs d[key]:后者在key不存在的情况下,会报错。前者不会,这样程序不会崩溃。 集合:set 定义集合:s = {...} ==> s = set({...}) 调用set工厂函数 集合的特点: 集合内的元素是唯一的:自动去重集合内的元素必须是可hash的,也就是不可变类型 集合是无序的,无索引。但是可以遍历:for i in set 集合的作用:作关系运算 s1 & s2 取交集 ===> s1.intersection(s2) s1 | s2 取并集 ===> s1.union(s2) s1 - s2 取差集:在s1, 不在s2 ===> s1.difference(s2) s2 - s1 取差集:在s2,不在s1 ====> s2.difference(s1) s1 ^ s2 取对称差集(不在交集中的)===> s1.sysmmetic_difference(s2) 常用的操作: s.clear() 清空s1.update(s2) s2的值并入s1s1.difference_update(s2) 求与s2的差集,并把差集部分覆盖写入s1 s1 ={ 1, 2, 3, 4, 6} s2 = {1, 5, 6, 2} s1.difference_update(s2) print(s1) 结果是:{3, 4} s1.update(s2) s2的值加入s1s.add(元素) 增加元素s.remove() 删除元素,如果元素不存在报错s.discard(元素) 删除元素,如果元素不存在不报错,better than removes.pop() 随机删(因为集合是无序的)s1.issubset(s2) s1是s2的子集,返回bool值s1.issuperset(s2) s1是s2的父级,返回bool值s1.isdisjoint(s2) 没有交集返回True bool值:True & False 产生bool值:比较运算、成员运算(if m in n: )所有数据类型都自带bool值数据类型返回False的情况:0、None、空(例如:空列表);其余情况都是True 变量的三种比较: x is y # 比较idx == y # 值比较type(x) is type(y) 类型比较 每种数据类型都是一个类,每个类都有方法,对象调用方法用 . 点。e.g. a = 1 (a = int(1),创建一个整型数,就调用int方法,把1传入===》工厂函数(批量生产);同样的 s = 'abc' 即s = str(abc), str也是工厂函数几种赋值: x =1 赋值操作,没有任何返回值链式赋值: a=b=c=d=e=f=10 print(a,b,c,d,e,f) 10 10 10 10 10 10多元赋值:交换变量的值(C语言是通过一个中间值) x = 12 y = 56 x,y = y,x print(x,y) 56 12 解压序列类型: s = 'hello' a,b,c,d,e = s 按索引一一对应 a,_,_,_,e = s 用下划线占位,只取首尾(要丢弃的值赋给_下划线) a,*_,b = s 中间都不要 m,n,*_ =s 只要前两个 *_,m,n = s 只要后两个 a,*_ = [1, 2, 3, 4] 取列表第一个值 其它分类方式: 可变与不可变:一个身份id 不可变(变了内存空间就变了);一个类型 不可变(变了内存空间就变了);而一个值可变,比如 列表的值可变 不可变对象:数字、字符、元组;可变对象:列表、字典。 列表因为可变,内存中会预留空间,所以列表耗内存。 字典在内存中存的has表,占用空间比列表还大,但优化了查询速度。取值方式来分:直接取值:数字(通过绑定的变量名,一次取出整体)序列类型:字符串、元组、列表映射类型:字典

流程控制与循环结构

if 条件语句: 语句1: if 条件1: # 判断条件1为真,则执行语句2 语句2 elif:条件2: # 判断条件2为真,则执行语句3 语句3 else: 语句4 # 如果前面条件都不满足,则执行语句4 语句5 # 语句5与if无关 循环语句: while循环 while 条件: # 条件判断为真,则执行循环体 循环体 语句1 # 循环不结束,该语句不执行 break 退出当层循环 continue 终止当层循环中的本次循环,进入下一次循环 将while的条件设为一变量值满足某一条件为真,让这一变量值在循环体内进行自增计数,直到不满足条件为假,循环结束; tag标志位法:tag = True 赋值,while tag: 开始循环,直到某一步完成,进行tag = False,循环结束。 for循环: for i in range(x, y, z): 语句 x起始 y尾(不包括) z步长   while 和 else 连用:while循环正常结束后,即没有被continue或break打断,才能输出else内容。 for 和 else 连用,也是同样的效果。 i = 0 while i < 5: print(i,end=' ') i += 1 else: print('循环正常结束')运行结果: 0 1 2 3 4 循环正常结束————————————— i = 0while i < 5: print(i,end=' ') i += 1 if i == 3: breakelse: print('循环正常结束') 运行结果: 0 1 2
转载请注明原文地址: https://www.6miu.com/read-25104.html

最新回复(0)