python 数据类型和变量初识
数据类型
计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值。但是,计算机能处理的远不止数值,还可以处理文本、图形、音频、视频、网页等各种各样的数据,不同的数据,需要定义不同的数据类型。在Python中,能够直接处理的数据类型有以下几种:
1、数字,包含整数和浮点数.
int (整数)
Python可以处理任意大小的整数,当然包括负整数,在程序中的表示方法和数学上的写法一模一样,例如:1,100,-8080,0,等等。
计算机由于使用二进制,所以,有时候用十六进制表示整数比较方便,十六进制用0x前缀和0-9,a-f表示,例如:0xff00,0xa5b4c3d2,等等。
float (浮点数)
浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,比如,1.23x109和12.3x108是完全相等的。浮点数可以用数学写法,如1.23,3.14,-9.01,等等。但是对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代,1.23x109就是1.23e9,或者12.3e8,0.000012可以写成1.2e-5,等等。
整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的(除法难道也是精确的?是的!),而浮点数运算则可能会有四舍五入的误差。
2、布尔值
布尔值和布尔代数的表示完全一致,一个布尔值只有True、False两种值,要么是True,要么是False,在Python中,可以直接用True、False表示布尔值(请注意大小写),也可以通过布尔运算计算出来:
>>> True True >>> False False >>> 3 > 2 True >>> 3 > 5 False
布尔值可以用and、or和not运算。
and运算是与运算,只有所有都为True,and运算结果才是True:
>>> True and True True >>> True and False False >>> False and False False >>> 5 > 3 and 3 > 1 True
or运算是或运算,只要其中有一个为True,or运算结果就是True:
>>> True or True True >>> True or False True >>> False or False False >>> 5 > 3 or 1 > 3 True
not运算是非运算,它是一个单目运算符,把True变成False,False变成True:
>>> not True False >>> not False True >>> not 1 > 2 True
3、空值
空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。
4、字符串(str)
字符串是 Python 中最常用的数据类型。我们可以使用引号('或")来创建字符串。
创建字符串很简单,只要为变量分配一个值即可。例如:
var1 = 'Hello World!'
万恶的字符串拼接:
python中的字符串在C语言中体现为是一个字符数组,每次创建字符串时候需要在内存中开辟一块连续的空,并且一旦需要修改字符串的话,就需要再次开辟空间,万恶的+号每出现一次就会在内从中重新开辟一块空间。
字符串格式化输出
在 Python 中,字符串格式化使用与 C 中 sprintf 函数一样的语法。
如下实例:
#!/usr/bin/python print("My name is %s and weight is %d kg!" % ('Zara', 21)) 以上实例输出结果: My name is Zara and weight is 21 kg!
PS: %s是格式化字符串; %d是格式化整数; %f是格式化 浮点数.
字符串常用功能:
- 移除空白
- 分割
- 长度
- 索引
- 切片
5.列表(list)
Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素
创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。如下所示
list1 = ['physics', 'chemistry', 1997, 2000]; list2 = [1, 2, 3, 4, 5 ]; list3 = ["a", "b", "c", "d"];
与字符串的索引一样,列表索引从0开始.
基本操作:
- 索引
- 切片
- 追加
- 删除
- 长度
- 切片
- 循环
- 包含
每个列表都具备如下功能:
List操作包含以下函数:
cmp(list1, list2): 比较两个列表的元素,两个元素相同返回0,前大后小返回1,前小后大返回-1 len(list): 列表元素个数 max(list): 返回列表元素最大值 min(list): 返回列表元素最小值 list('var'): 将元素转换为列表 del L[1] 删除指定下标的元素 del L[1:3] 删除指定下标范围的元素
List操作包含以下方法:
L.append('var') append方法用于在列表的尾部追加元素,参数'var'是插入元素的值 L.insert(index,'var') 用于将对象插入到列表中,俩个参数,第一个是索引位置,第二个插入的元素对象. L.pop() 返回列表最后一个元素,并从List中删除. L.pop(index) 返回列表索引的元素,并删除. L.count(var) 该元素在列表中出现的个数 L.index('var') 取出元素的位置(下标),无则抛出异常. L.remove('var') remove方法用于从列表中移除第一次的值(值如果有重复则删除第一个) L.sort() 排序 L.reverse() 倒序 L.extend(list1) extend方法用于将两个列表合并,将list1列表的值添加到L列表的后面。
L.copy() 浅拷贝,只独立copy第一层,如果列表中嵌套列表修改后也会修改.
Python列表脚本操作符:
List 中 + 和 * 的操作符与字符串相似。+ 号用于组合列表,* 号用于重复列表。

Python列表截取:
L = ['spam', 'Spam', 'SPAM!','xusandu']

操作实例:
#增加元素 >>> ShoppingList = ['car','clothers','iphone','apple'] #定义列表 >>> ShoppingList.append('xiaomi') #向列表中插入'xiaomi'字符串 >>> print(ShoppingList) #查看列表 ['car', 'clothers', 'iphone', 'apple', 'xiaomi'] >>> ShoppingList.insert(0,'smoke') #在列表下标为零处(即列表第一个元素),插入'smoke'元素 >>> print(ShoppingList) ['smoke', 'car', 'clothers', 'iphone', 'apple', 'xiaomi'] #删除 >>> ShoppingList.remove('iphone') #从列表中移除'iphone'元素 >>> print(ShoppingList) ['smoke', 'car', 'clothers', 'apple', 'xiaomi'] >>> ShoppingList.pop() #如果不指定下标默认从List中删除掉最后一个元素.ShoppingList.pop(1)表示删除下标为1的元素. 'xiaomi' >>> print(ShoppingList) ['smoke', 'car', 'clothers', 'apple'] >>> >>> del ShoppingList[0] #使用del 函数删除List中下标为0的元素(此处下标为0表示的是smoke) >>> print(ShoppingList) ['car', 'clothers', 'apple'] #改 >>> ShoppingList[0] = 'bus' #将下标为0的元素(即‘car’字符)替换为‘bus’ >>> print(ShoppingList) ['bus', 'clothers', 'apple'] #查询 >>> ShoppingList[0] #查看下标为零的元素,即第一个元素 'bus' >>> ShoppingList[-1] #查看下标为-1的元素,即倒数第一个元素 'apple' >>> ShoppingList[1:] #查看下标为1以后所有的元素 ['clothers', 'apple'] >>> ShoppingList[:-1] #查看下标为-1之前的所有元素 ['bus', 'clothers'] >>> >>> 'car' in ShoppingList #List列表中查找'car'元素,如果存在则返回Ture True >>> >>> ShoppingList.index('rain') #使用index方法查找rain的下标值 >>> #统计 >>> print(ShoppingList) ['bus', 'clothers', 'apple', 'rain', 'car'] >>> ShoppingList.count('car') #统计列表中元素'car'的个数 >>> #排序 >>> ShoppingList.sort() #对元素按第一个字母顺序排序 >>> print(ShoppingList) ['apple', 'bus', 'car', 'clothers', 'rain'] >>> >>> ShoppingList.reverse() #倒序 >>> print(ShoppingList) ['rain', 'clothers', 'car', 'bus', 'apple'] >>> #合并列表 >>> li = [1,2,3,4] >>> ShoppingList.extend(li) #将li列表中的元素添加到ShoppingList列表中 >>> print(ShoppingList) ['rain', 'clothers', 'car', 'bus', 'apple', 1, 2, 3, 4] >>> #copy 浅copy,只独立拷贝第一层. ShoppingList = ['car','clothers','iphone','bus'] li = ShoppingList.copy() print(ShoppingList) print(li) ShoppingList[1] = "apple" print(ShoppingList) print(li) #在列表中嵌套一个列表 ShoppingList = ['car','clothers',['a','b','c'],'iphone','bus'] lis = ShoppingList.copy() ShoppingList[1] = "milk" ShoppingList[2][0] = "A" print(ShoppingList) print(lis) ----执行结果----------------------- ['car', 'clothers', 'iphone', 'bus'] ['car', 'clothers', 'iphone', 'bus'] ['car', 'apple', 'iphone', 'bus'] ['car', 'clothers', 'iphone', 'bus'] ['car', 'milk', ['A', 'b', 'c'], 'iphone', 'bus'] ['car', 'clothers', ['A', 'b', 'c'], 'iphone', 'bus']
使用列表实现购物车功能
#!/usr/bin/env python #coding:utf-8 ''' 脚本思路: 1.判断用户输入类型, 2.循环出商品和下标的对应值 3.判断用户商品编号输入值 4.商品价格和用户输入金额比较,如果商品价格低于用户余额,将商品加入购物车并减去商品价格. ''' product_list = [ ('Iphone',5800), ('Mac Pro',9800), ('Bike',800), ('Watch',10600), ('Coffee',31), ('Python',120), ] shoping_list = [] salary = input("请输入你的工资:") #如果输入的是数字返回True,如果不全是数字则返回flase. if salary.isdigit(): salary = int(salary) while True: for index,item in enumerate(product_list,start=0): print(index,item) user_choice = input("请输入你要买商品的编号>>>:") if user_choice.isdigit(): user_choice = int(user_choice) if user_choice < len(product_list) and user_choice >= 0: p_item = product_list[user_choice] #通过商品下标取出商品对应元组 #print(p_item[1]) #通过商品价格和输入金额对比,如果买得起则进行后续操作 if p_item[1] <= salary: shoping_list.append(p_item) #购买商品后的用户余额 salary -= p_item[1] print("你买的商品是 %s 你的剩余金额为 %s" %(shoping_list,salary)) else: print("你的余额剩余 %s ,买不起该商品." %(salary)) else: print("你输入的商品编号%s不存在." %(user_choice)) elif user_choice == 'q' or user_choice == 'exit': print('''购买的商品列表如下: ''') for i in shoping_list: print(i) print("你目前的余额为 %s" % (salary)) exit() else: print("编号必须为数字") else: print("输入工资必须为数字")
6.元组 (不可变列表)
不可变序列-----元组 tuple
元组通过圆括号中用逗号分隔的项目定义,不可以添加和删除元组.
元组通过圆括号中用逗号分隔的项目定义,不可以添加和删除元组.
创建元组:
ages = (11, 22, 33, 44, 55) 或 ages = tuple((11, 22, 33, 44, 55))
每个元组都具备如下功能:connt,index
>>> name_tuple = ('a','b','c','a','b') >>> type(name_tuple) <type 'tuple'> >>> name_tuple.count('a') //统计a出现次数 2 >>> name_tuple.index('b') //获取b元素下标位置. 1
7.dict(字典)
字典是Python语言中唯一的映射类型。
映射类型对象里哈希值(键,key)和指向的对象(值,value)是一对多的的关系,通常被认为是可变的哈希表。
字典对象是可变的,它是一个容器类型,能存储任意个数的Python对象,其中也可包括其他容器类型。
字典的特性:
dict是无序的
key必须是唯一的
字典没有下标.通过key检索
创建字典:
person = {"name": "saneri", 'age': 20}
或
person = dict({"name": "saneri", 'age': 20})
技巧:
字典中包含列表或字典
var1= {"ZhangSan" : ['23','IT'],"Lisi" : ['22','dota']}
var2 = {"Wangwu" : {"age" : 23,"job":"IT"},"Song" : {"age":22,"job":"dota"}}
常用操作:
- 索引
- 新增
- 删除
- 键、值、键值对
- 循环
- 长度
python字典实例操作
#增加 >>> info = { "zhangsan" : 20,"Lisi" : 30,"Wangwu" : 40} >>> info['Zhaoliu'] = 60 >>> print(info) {'zhangsan': 20, 'Lisi': 30, 'Wangwu': 40, 'Zhaoliu': 60} #修改 # 如果key存在则修改值,不存在则添加 >>> info['Zhaoliu'] = 80 >>> print(info) {'zhangsan': 20, 'Lisi': 30, 'Wangwu': 40, 'Zhaoliu': 80} #删除 第一种方法,标准删除 >>> print(info) {'zhangsan': 20, 'Lisi': 30, 'Wangwu': 40, 'Zhaoliu': 80} >>> info.pop("Zhaoliu") 80 >>> print(info) {'zhangsan': 20, 'Lisi': 30, 'Wangwu': 40} 第二种方法: >>> del info["Zhaoliu"] >>> print(info) {'zhangsan': 20, 'Lisi': 30, 'Wangwu': 40} 第三种,随机删除 >>> info.popitem() ('Zhaoliu', 80) >>> print(info) {'zhangsan': 20, 'Lisi': 30, 'Wangwu': 40} #查找 >>> print(info) {'zhangsan': 20, 'Lisi': 30, 'Wangwu': 40, 'Zhaoliu': 80} >>> info['zhangsan'] #如果key存在就返回结果 20 >>> info['saneri'] #如果key不存在,dict就会报错: Traceback (most recent call last): File "<input>", line 1, in <module> KeyError: 'saneri' 要避免key不存在的错误,有两种办法,一是通过in判断key是否存在: >>> 'zhangsan' in info True 二是通过dict提供的get方法,如果key不存在,可以返回None,或者自己指定的value: >>> info.get('saneri') >>> info.get('saneri',-1) -1 注意:返回None的时候Python的交互式命令行不显示结果。 #info.keys()方法 >>> info {'zhangsan': 20, 'Lisi': 30, 'Wangwu': 40, 'Zhaoliu': 80} >>> info.keys() dict_keys(['zhangsan', 'Lisi', 'Wangwu', 'Zhaoliu']) #info.values()方法 >>> info.values() dict_values([20, 30, 40, 80]) #info.items()方法 >>> info.items() dict_items([('zhangsan', 20), ('Lisi', 30), ('Wangwu', 40), ('Zhaoliu', 80)]) #info.setdefault()方法 setdefault() 函数和get()方法类似, 如果键不已经存在于字典中,将会添加键并将值设为默认值 >>> info.setdefault('saneri','100') '100' >>> info {'zhangsan': 20, 'Lisi': 30, 'Wangwu': 40, 'Zhaoliu': 80, 'saneri': '100'} >>> info.setdefault('adny') >>> info {'zhangsan': 20, 'Lisi': 30, 'Wangwu': 40, 'Zhaoliu': 80, 'saneri': '100', 'adny': None} #info.update()方法 >>> info {'zhangsan': 20, 'Lisi': 30, 'Wangwu': 40, 'Zhaoliu': 80, 'saneri': '100', 'adny': None} >>> dict = {1:2,3:4,'tom':'IT'} >>> info.update(dict) >>> info {'zhangsan': 20, 'Lisi': 30, 'Wangwu': 40, 'Zhaoliu': 80, 'saneri': '100', 'adny': None, 1: 2, 3: 4, 'tom': 'IT'}
循环dict的方法
#!/usr/bin/env python #coding:utf-8 info = { "zhangsan" : 20, "Lisi" : 30, "Wangwu" : 40 } #1.建议使用 for i in info: print(i,info[i]) print('---------------------------') #2.会先把dict转成list,数据里大时莫用 for k,v in info.items(): print(k,v) -----------执行结果------------ zhangsan 20 Lisi 30 Wangwu 40 --------------------------- zhangsan 20 Lisi 30 Wangwu 40
三级菜单
#!/usr/bin/env python #coding:utf-8 city_list = { "北京": { "海淀区" : { "上地" : ["百度大厦"], "海淀黄庄" : ["互联网金融大厦"], "中关村" : ["海龙大厦"], }, "朝阳区" : { "朝阳门" : ["丰联大厦"], "东直门" : ["银泰大厦"], "望京" : ["望京soho"], }, "昌平区" : { "回龙观" : ["华联超市"], "龙泽" : ["美廉美超市"], "霍营" : ["霍营超市"], }, }, "陕西省" : { "西安市" : { "长安区" : [1], "碑林区" : [2], "雁塔区" : [3], "莲湖区" : [4], }, "咸阳市" : { "秦都区" : [0], "渭城区" : [0], "西咸新区" : [0], }, }, } while True: for i in city_list: #打印第一层 print(i) #北京、陕西省 choice = input("请输入城市名>>>>>:").strip() if choice in city_list: # 如果输入城市在字典中,则执行如下操作 while True: for m in city_list[choice]: #打印第二层 print(m) choice2 = input("请选择市区>>>>:").strip() if choice2 in city_list[choice]: while True: for k in city_list[choice][choice2]: #打印第三层 print(k) choice3 = input("请选择区县>>>>>>>:").strip() if choice3 in city_list[choice][choice2]: for v in city_list[choice][choice2][choice3]: #打印第四层 print(v) choice4 = input("已经是最后一级,按b键返回>>>>:") if choice4 == "b": pass if choice3 == "b": break if choice2 == "b": break if choice == "b": exit()
#!/usr/bin/env python #coding:utf-8 city_list = { "北京": { "海淀区" : { "上地" : ["百度大厦"], "海淀黄庄" : ["互联网金融大厦"], "中关村" : ["海龙大厦"], }, "朝阳区" : { "朝阳门" : ["丰联大厦"], "东直门" : ["银泰大厦"], "望京" : ["望京soho"], }, "昌平区" : { "回龙观" : ["华联超市"], "龙泽" : ["美廉美超市"], "霍营" : ["霍营超市"], }, }, "陕西省" : { "西安市" : { "长安区" : [1], "碑林区" : [2], "雁塔区" : [3], "莲湖区" : [4], }, "咸阳市" : { "秦都区" : [0], "渭城区" : [0], "西咸新区" : [0], }, }, } exit_flag = False while not exit_flag: for i in city_list: print(i) choice = input("请输入省市>>>>>>:").strip() if choice in city_list: while not exit_flag: for m in city_list[choice]: print(m) choice2 = input("请输入市区>>>>:").strip() if choice2 in city_list[choice]: while not exit_flag: for k in city_list[choice][choice2]: print(k) choice3 = input("请输入区县>>>>:").strip() if choice3 in city_list[choice][choice2]: while not exit_flag: for v in city_list[choice][choice2][choice3]: print(v) choice4 = input("最后一层,返回请按b键,退出请按q>>>:") if choice4 == "b": break elif choice4 == "q": exit_flag = True if choice3 == "b": break elif choice3 == "q": exit_flag = True if choice2 == "b": break elif choice2 == "q": exit_flag = True if choice == "b": break elif choice == "q": exit_flag = True
8.set集合
集合(set)是一个无序不重复元素的序列。
它的主要作用如下:
去重,把一个列表变成集合,就自动去重了
关系测试,测试两组数据之前的交集、差集、并集等关系
set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key
可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
创建格式:
1.可以使用大括号 { } s = {value1,value2,...} 2.或提供一个list作为输入集合 s = set([value1,value2,...]) 3.或者 set() 函数创建集合 set(value)
1. set成员测试
>>>student = {'Tom', 'Jim', 'Mary', 'Tom', 'Jack', 'Rose'}
>>> print(student) # 输出集合,重复的元素被自动去掉
{'Mary', 'Tom', 'Jack', 'Rose', 'Jim'}
# 成员测试
>>> if('Rose' in student) :
... print('Rose 在集合中')
... else:
... print('Rose 不在集合中')
...
Rose 在集合中
>>>
2.set进行集合运算
>>> s = set([3,5,9,10]) >>> t = set(['a','b','c',1,2,3]) >>> s - t # 求差集(项在s中,但不在t中) {9, 10, 5} >>> s | t # s 和 t的并集 {1, 2, 3, 'b', 5, 'c', 9, 10, 'a'} >>> s & t # 求s 和 t的交集 {3} >>> s ^ t #对称差集(项在s或t中,但不会同时出现在二者中) {1, 2, 'b', 'c', 'a', 5, 9, 10}
3.通过set方法函数对集合进行操作
>>> s = set([3,5,9,10]) >>> t = set(['a','b','c',1,2,3]) # add(增加元素) >>> t.add('x') >>> t {1, 2, 3, 'b', 'c', 'x', 'a'} #remove()可以删除一项: >>> t.remove('a') >>> t {1, 2, 3, 'b', 'c', 'x'} >>> len(t) 6 #测试 x 是否是 t 的成员 >>> 'x' in t True #测试 x 是否不是 t 的成员 >>> 'x' not in t False # issubset(判断子集) >>> s.issubset(t) False # issuperset(判断父集) >>> s.issuperset(t) False #返回一个新的 set 包含 s 和 t 中的每一个元素 >>> s.union(t) {1, 2, 3, 'b', 5, 'c', 9, 10, 'x'} #返回一个新的 set 包含 s 和 t 中的公共元素 >>> s.intersection(t) {3} #返回一个新的 set 包含 s 中有但是 t 中没有的元素 >>> s.difference(t) {9, 10, 5} #返回一个新的 set 包含 s 和 t 中不重复的元素 >>> s.symmetric_difference(t) {'x', 1, 2, 'b', 'c', 5, 9, 10} # 在s中添加多项 >>> s.update([10,37,42]) >>> s {3, 37, 5, 9, 10, 42} >>>
变量
变量的概念基本上和初中代数的方程变量是一致的,只是在计算机程序中,变量不仅可以是数字,还可以是任意数据类型。
变量在程序中就是用一个变量名表示了,变量名必须是大小写英文、数字和_的组合,且不能用数字开头
在Python中,等号=是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量,例如:
a = 123 # a是整数 print(a) a = 'ABC' # a变为字符串 print(a)
这种变量本身类型不固定的语言称之为动态语言,与之对应的是静态语言。静态语言在定义变量时必须指定变量类型,如果赋值的时候类型不匹配,就会报错。例如Java是静态语言,赋值语句如下(// 表示注释):
int a = 123; // a是整数类型变量 a = "ABC"; // 错误:不能把字符串赋给整型变量
和静态语言相比,动态语言更灵活,就是这个原因。
请不要把赋值语句的等号等同于数学的等号。比如下面的代码:
x = 10 x = x + 2
如果从数学上理解x = x + 2那无论如何是不成立的,在程序中,赋值语句先计算右侧的表达式x + 2,得到结果12,再赋给变量x。由于x之前的值是10,重新赋值后,x的值变成12。
理解变量在计算机内存中的表示也非常重要。当我们写:
a = 'ABC'
时,Python解释器干了两件事情:
- 在内存中创建了一个'ABC'的字符串;
- 在内存中创建了一个名为a的变量,并把它指向'ABC'。
也可以把一个变量a赋值给另一个变量b,这个操作实际上是把变量b指向变量a所指向的数据,例如下面的代码:
a = 'ABC' b = a a = 'XYZ' print(b)
最后一行打印出变量b的内容到底是'ABC'呢还是'XYZ'?如果从数学意义上理解,就会错误地得出b和a相同,也应该是'XYZ',但实际上b的值是'ABC',让我们一行一行地执行代码,就可以看到到底发生了什么事:
执行a = 'ABC',解释器创建了字符串'ABC'和变量a,并把a指向'ABC':
执行b = a,解释器创建了变量b,并把b指向a指向的字符串'ABC':
执行a = 'XYZ',解释器创建了字符串'XYZ',并把a的指向改为'XYZ',但b并没有更改:
所以,最后打印变量b的结果自然是'ABC'了。
在Python中,有两种除法,一种除法是/,/除法计算结果是浮点数,即使是两个整数恰好整除,结果也是浮点数:
除法是//,称为地板除,两个整数的除法仍然是整数:
Python还提供一个余数运算,可以得到两个整数相除的余数:
>>> 9 / 3 3.0 >>> 9 // 3 3 >>> 9 % 3 0 >>> 10 % 3 1
字符串和编码
在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。

浙公网安备 33010602011771号