python day2

2019/10/5

1. 编码转换

编程是外国佬发明的,所以一开始的编码表只有英文与标点符号,没有中文的事。

ASCII编码表:一个字符占用两个字节。

后来中国人发明了GBK编码表,可以显示中文。

再后来又有了Unicode万国码. Unicode可以包容全世界人民的语言。Unicode是统一用4个字节来表示一个字符。python2默认使用unicode码表。

又有了utf-8。utf-8是表示英文仍然是两个字节,中文占用3到6个字节。现在python3默认使用utf-8作为编码方式。

每个模块的开头的# -*- coding:utf-8 -*-就是指明编码方式是utf-8。

python2.x的编码方式之间的转换如下:



就是utf-8如果要转换成gbk,必须要通过unicode作为中转。

# -*- coding:utf-8 -*-

#下面是python2的情况
temp = '张三'
#decode()方法是解码,解码必须指定原来的编码方式,就是解码成unicode码。
temp_unicode = temp.decode('utf-8')
#编码也要指定需要编码的码表。
tem_gbk=temp_unicode.encode('gbk')
print(temp,temp_unicode,temp_gbk,sep='\t') #下面是python3的情况
#python3中,自动转换utf-8,unicode,gbk
#python3中,移除了unicode类型
temp='李四'
temp_gbk=temp.encode('gbk')

2. python的基本数据类型

总共有八种基本数据类型:int(数字),float(浮点数),str(字符串),bool(布尔值),list(列表),tuple(元组),dict(字典),set(集合)。

每种数据类型都有自己独有的方法与属性。

python是强类型语言,不同类型之间不能相互运算

可以通过type(x)函数判断某个变量x是哪种类型。

可以通过dir(x)函数来判断某个对象x有哪些方法。

可以通过help(type(x))函数来判断某个对象x的具体方法说明。

所有类型具备的方法都在它的类中。

2.1. 数值类型(int,float)

数值类型有加减乘除幂运算,也有比较操作等。

#打开buitlins模块,看到int类基本上都是魔法方法(左右两边都是双下划线叫魔法方法,比如__add__)。
int(x,base=10) #将数值型字符串x转化成整数,默认是10进制,也可以改成8,16。
a=2#将2赋值给变量2
a.__eq__(5) #就是判断2是否==5
a.__add__(5) #就是2+5
a.__sub__(1) # 2-1
a.__mul__(3) # 2*3
a.__div__(2) # 2/2,返回1.0
a.__divmod__(2) #2除以2,返回得是商和余组成的元组。
a.__floordiv__(2) # 就是2//2,取商是1。
a.__ge__(1) #就是a>=1,g是great,e是equal
a.__gt__(1) #就是a>1,g是great,t是than。
a.__le__(1) #就是a<=1,l是less,e是equal
a.__lt__(1) #就是a<1,l是less,t是than.
a.__mod__(2) #就是a%2,取余是0。
a.__pow__(3) # 2**3
a.__lshift__(2) # a<<2,a的二进制左移2位,相当于a*(2**2)
a.__rshift__(2) # a>>2,a的二进制右移2位,相当于a/(2**2)

2.2. str(字符串)

而str,就会有很多方法了。常用方法有:strip,index,切片,split,join,len.(记得学英语的时候,记不住太多单词,慢慢用着用着就会了。)

capitalize,center,count,decode,encode,endswith,startswith,expandtabs,find,index,format,join,isdigit,split,strip,title,lstrip,rstrip,partition,replace,swapcase,upper,lower.

s1 = 'love is Not {0} EaSy'
s1.capitalize() # 返回s1的一份复制,并且是首字母大写,其余小写
s1.center(20,'-') # 让字符串在指定长度内居中,不够的长度以第二个参数进行填充。第二个参数默认是空格。
s1.count('N',2,10) #从指定长度统计第一个参数即N出现的次数。后面两个参数2与10可以不写,默认是None,就会搜寻整个字符串。
s1.decode('utf-8) # 某UTF8解码
s1.encode('gbk') #以gbk码表进行编码。
s1.endswith('y',1,8) #判断指定索引长度即第2个到7个是否以y结束,为真则返回True,假则是False。
s1.find('e',3,6) # 从指定索引长度即第3个到第5个,去找到e,如果找到了,返回e的索引值,找不到则返回-1
s1.index('e') # 返回e的索引值,如果e不存在,则会报错。也可以指定索引长度。
s1.format('so') #字符串的格式化,将so代替占位符{0}。
‘*’.join([1,2,3]) #join是连接方法,参数一般是可迭代对象。使用*去连接列表中元素,并返回一个字符串‘123’
s1.isdigit() #判断s1是否是整数型字符串
s1.split(' ') #以传递的参数空格作为分隔符,返回一个列表,即['love','is','Not','{0}','EaSy']
s1.strip() #去掉字符串左右两边的空格。
s1.title() # 每一个单词的首字母都大写
s1.lstrip() #去掉左边的空格。
s1.rstrip() # 去掉右边的空格
s1.partition('is') # 按照给定字符串,分成三部分,并返回一个元组。
s1.replace('Not','so') # 将not替换为so
s1.swapcase() #大小写一一转换
s1.upper() #全部大写
s1.lower() #全部小写
s1.isalnum() #判断字符串是否是由字母或数字组成。
s1.isalpha() #判断字符串是否全部由字母组成。

3. for 迭代遍历

for迭代遍历的语法格式如下:

for item in iterable:
执行语句

一开始的时候不是太懂,是没有搞懂迭代与遍历的意思,可迭代对象是iterable,iterable或者为空,或者至少有1个以上的元素,for item in iterable就是把item当作iterable里面的每一个元素,这样iterable里面的每个元素都走一遍就叫迭代。

比如:for x in [1,2,3,4]意思就是x按照顺序依次等于1,2,3,4,后面的执行语句每次都执行一次。

4. 列表list

形如[1,'2',True,'张三']这样用中括号括起来的就是列表list。列表的元素可以是任意数据类型,也就是说列表里面还可以嵌套列表。

列表是有顺序的,就是有索引值,列表的第一个元素的索引值从0开始,第二个元素索引值是1,依此类推。

定义列表有两种方法,一种是直接用中括号写,比如list1 = [1,3,'4',],第二种就是使用内置函数list,比如list1=list(1,2,3)(一个变量后面跟着括号叫做函数调用,比如list()就是调用list函数)

列表的方法:索引,切片,append,clear,count,extend,index,insert,pop,remove,reverse,sort.

列表也是可迭代的。凡是可是用索引来查元素的,就是有序的。

list1=[1,2,'3',True,'x']   #定义一个列表包含5个元素,并将其赋值给变量list1.
# 列表的索引
list1[0] # 取列表的第1个元素1
list1[-1] # 索引值也可以是负数,表示倒着取,-1表示最后一个元素。
list1[2] #取列表的第3个元素,即'3'。
list1[-2] # 取列表的倒数第2个元素,即True.
#可以通过索引直接修改列表的元素
list[0] = 8 #将第1个由1改为8了
#列表的切片
#切片就是取列表的某一段。切片是按照索引值来进行的,并且是包括左边不包括右边,即左包右不包。
list1[0:2]#表示从索引值0开始,一直到索引值为2结束(不包括2),也就是取索引值0与1这两个元素,并返回这两个元素组成的新列表,即[1,2]。
list1[0:2:2]#切片有三个参数,第一个表示从哪开始,第二个表示到哪结束,第三个表示步长,步长即每隔多少个取一个。
#上面表示从0开始,到2结束,步长为2。即取奇数项索引,所以只取到了元素1。
list1[:]#第一个参数不写则默认是0,第二个参数不写,则默认是列表长度,第三个参数不写则默认是1,所以这里表示复制一份列表。
list1[-4::-2]#表示倒着取,步长为2,前面的索引值也得是负数。结果是[2]。
#往列表的最后项追加元素
list1.append(7)
#往列表里面插入指定索引位置元素
list1.insert(1,'李四')
#统计列表中某个元素的出现次数,可以指定索引长度。
list1.count(1,0,3)#表示在索引值从0到3终止这个切片段,1这个元素出现了多少次。如果不指定索引长度,则默认是整个列表。
#扩展,将另一个可迭代对象的元素添加到列表的末尾。
a=list(1,2,3)
list1.extend(a)#
#返回某个元素的索引值,也可以指定索引长度
list1.index(1,0,4),如果不写,则默认是整个列表第一次出现元素1的索引值。
#pop是从列表中抽取一个元素,返回且删除这个元素。参数是索引值。
list1.pop(-2)#删除倒数第2个元素
list1.pop()#不写索引值,则默认删除最后一个元素。
#remove是删除元素,参数是删除元素。
list1.remove('x')#删除元素x
#反转,就是倒着顺序显示列表
list1.reverse()#将元素按照反转的顺序进行排列
#排序,sort(self,key=None, reverse=False)。key是传递一个排序函数,而reverse是布尔值,默认为False,则按升序进行排列,如果为真,则按逆序进行排列。
#排序时,英文与数字默认按照ASCII码表进行排序,中文按UNICODE码。
list2=[-1,-2,3,7,-9]
list2.sort()
list1.sort(key=abs,reverse=True)

5. 元组tuple

形如(1,2,'3',True)的就是元组。元组是有序的可迭代的不可变对象。

元组与列表差不多,只是没有增删改切片方法,所以元组是不可变对象。

定义元组有两种方法,一种是直接定义:t1=(1,2,'3',True),

第二种就是使用tuple函数,t1=tuple(list(1,2,3)),tuple后面跟可迭代对象。

元组可以通过索引查看元素,但是没有切片。

6. 字典dict

字典是key:value形式的键值对的集合,无序的,可迭代的,可变对象。

定义字典有两种方法,一种是直接定义:d1={1:'x','some':2,3:True}

第二是通过dict函数定义:d2=dict(1=3,name='lanxing',z=True)

注意:key必须是不可变对象,value则可以是任意数据类型。

字典的方法:key索引,clear,copy,fromkeys,get,items,keys,pop,popitem,setdefault,update,values。

d1={1:'x','some':2,3:True}#定义一个dict
v1= d1[1] #通过key来访问value
v2= d1['some']
d1['some']='y' #通过key来修改value,如果key存在,则修改value,如果不存在,则创建新的key:value对。
d1[‘x'] = 'z' #创建新的key:value对。
d1.copy() #浅复制一份字典
d2=dict() #创建一个空字典
#fromkeys(S[,v])方法表示创建一个新字典,新字典的key是来自第一个参数,值是可选的,默认是None,如果写了,则每个值都是一样的。
d3=d2.fromkeys(d1,'x')
#D.get(k[,d]),根据key获得值,如果key存在,则返回D[key],不存在则返回d,默认d就是None
d1.get('hello',5) #返回5,因为索引hello并不存在
#返回所有的键值对,键值对以元组展示,所有的元组存储在列表中
d1.items() #输出是形如dict_items([(1, 'x'), ('some', 2), (3, True)])
#d1.keys(),返回所有的key列表
d1.keys()
#d1.keys(),返回所有的key列表
d1.values()
#d1.pop(key[,v])输出指定key的值在屏幕上,并删除指定key的键值对,如果key不存在会报错。也可以指定key不存在时,返回的值。
d1.pop(1)
#随机删除一个键值对。
d1.popitem()
#D.setdefault(k[,v=none]),如果k存在,则返回D[k],不存在则创建D[k]=v。
d1.setdefault('z','helloworld')
’‘’
def update(self, E=None, **F): # known special case of dict.update
""" 更新
{'name':'alex', 'age': 18000}
[('name','sbsbsb'),]
"""
"""
D.update([E, ]**F) -> None. Update D from dict/iterable E and F.
If E present and has a .keys() method, does: for k in E: D[k] = E[k]
If E present and lacks .keys() method, does: for (k, v) in E: D[k] = v
In either case, this is followed by: for k in F: D[k] = F[k]
"""
pass
‘’‘
d3 = {'name':'张三','age':18}
d1.update(d3,sex='male',hobby='coding')
{'some': 2, 3: True, 'name': '张三', 'age': 18, 'sex': 'male', 'hobby': 'coding'}

7. 枚举enumerate

为可迭代对象增加序列号:0,1,2,3...,默认从0开始,可以指定。

for k,v in enumerate(list(('name1','name2','name3'))):
#('name1','name2','name3')是一个元组,list括号只接一个参数,即可迭代对象,而元组是可迭代对象。enumerate括号也是传入的可迭代对象。
print(k,v)

8. range和xrange

8.1. python2.x

range()立刻在内存中生成数字序列。

xrange(1,10,3)生成可迭代的数字序列。左包,右不包。从1开始,到10终止,步长为3。

8.2. python3.x中

range等于xrange.

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

9. 作业

'''
一、元素分类 有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。
即: {'k1': 大于66的所有值, 'k2': 小于66的所有值} 二、查找
查找列表中元素,移除每个元素的空格,并查找以 a或A开头 并且以 c 结尾的所有元素。
li = ["alec", " aric", "Alex", "Tony", "rain"]
tu = ("alec", " aric", "Alex", "Tony", "rain")
dic = {'k1': "alex", 'k2': ' aric', "k3": "Alex", "k4": "Tony"} 三、输出商品列表,用户输入序号,显示用户选中的商品
商品 li = ["手机", "电脑", '鼠标垫', '游艇'] 四、购物车
功能要求: 要求用户输入总资产,例如:2000
显示商品列表,让用户根据序号选择商品,加入购物车
购买,如果商品总额大于总资产,提示账户余额不足,否则,购买成功。
附加:可充值、某商品移除购物车
1
2
3
4
5
6
goods = [
{"name": "电脑", "price": 1999},
{"name": "鼠标", "price": 10},
{"name": "游艇", "price": 20},
{"name": "美女", "price": 998},
]
五、用户交互,显示省市县三级联动的选择 1
2
3
4
5
6
7
8
9
10
11
12
13
dic = {
"河北": {
"石家庄": ["鹿泉", "藁城", "元氏"],
"邯郸": ["永年", "涉县", "磁县"],
}
"河南": {
...
}
"山西": {
...
} }
'''
#第一题
'''
d1 = {}
list0 = [x*10+x for x in range(1, 10)]
list1 = []
list2 = []
for x in list0:
if x > 66:
list1.append(x)
elif x < 66:
list2.append(x)
d1['k1'] = list1
d1['k2'] = list2
print(d1)
''' #第二题
'''
list0=[li,tu,dic.values()]
list1 = []
for j in list0:
for i in j:
i=i.strip()
if i.startswith('a') or i.startswith('A') and i.endswith('c'):
list1.append(i)
print(list1)
''' #第三题
'''
li = ["手机", "电脑", '鼠标垫', '游艇'] for k, g in enumerate(li):
print(k,g)
while True:
choice = input('请输入商品序列号选择商品')
if choice.isdigit():
if 0<=int(choice)<=len(li):
print(li[int(choice)])
else:
break
'''
#第四题
'''
goods = [
{"name": "电脑", "price": 1999},
{"name": "鼠标", "price": 10},
{"name": "游艇", "price": 20},
{"name": "美女", "price": 998},
]
for k, v in enumerate(goods):
list1 = list(v.values())
print(k, list1[0], list1[1])
asset = int(input('请输入你的总资产:'))
list2 = []
sum = 0
dict1 = {}
while True:
choice = input('请输入序列号选择商品或或c清除商品或或m充值或q退出:>>>')
if choice.strip().isdigit():
num = int(choice)
if 0 <= num < len(goods):
if asset - goods[num]['price'] >= 0:
list2.append(goods[num]['name'])
asset = asset - goods[num]['price']
sum += goods[num]['price']
dict1[goods[num]['name']] = goods[num]['price']
print('购买商品%s成功,花费金额%s,总共消费金额%s,剩余金额%s' %
(goods[num]['name'], goods[num]['price'], sum, asset))
else:
print('余额不足,请充值')
elif choice.strip().lower() == 'c':
print('购物清单如下:')
set2 = set(list2)
list3 = []
for k, v in enumerate(set2):
print('序号:%s 数量:%s 商品:%s 总金额:%s' %
(k, list2.count(v), v, list2.count(v)*dict1[v]))
list3.append(v) choice2 = int(input('请输入移除的商品序列号:>>>'))
list2.remove(list3[choice2])
asset = asset + dict1[list3[choice2]]
elif choice.strip().lower() == 'm':
money = int(input('请输入充值金额:>>>'))
asset = asset + money elif choice.strip().lower() == 'q':
print('购买商品如下:')
set2 = set(list2)
for k, v in enumerate(set2):
print('序号:%s 数量:%s 商品:%s 总金额:%s' %
(k, list2.count(v), v, list2.count(v)*dict1[v]))
print('剩余金额%s' % asset)
break
else:
print('输入错误,请输入序列号')
''' #第五题
'''
dic = {
"河北": {
"石家庄": ["鹿泉", "藁城", "元氏"],
"邯郸": ["永年", "涉县", "磁县"],
},
"河南": {
'郑州': ['郑一', '郑二'],
'开封': ['开一', '开二']
},
"山西": {
'太原': ['太一', '太二'],
'同大': ['同一', '同二'] } }
for k, v in enumerate(dic.keys()):
print(k, v)
while True:
province_choice = int(input('请输入序号选择哪个省:>>>').strip())
if province_choice == 0:
list1=list(dic['河北'].keys())
for i in range(len(list1)):
print(i,list1[i] )
city_choice = int(input('请输入序号选择哪个市:>>>').strip())
if city_choice == 0:
list2 = dic['河北']['石家庄']
for j in range(len(list2)):
print(j,list2[j])
town_choice = int(input('请输入序号选择哪个县:>>>').strip())
if town_choice==0:
print(list2[0])
elif town_choice==1:
print(list2[1])
elif town_choice==2:
print(list2[2])
elif province_choice == 1:
pass
else:
pass
'''

python day2:python的基本数据类型及其方法的更多相关文章

  1. python学习日记(基础数据类型及其方法01)

    数字 int 主要是用于计算的,常用的方法有一种 #既十进制数值用二进制表示时,最少使用的位数i = 3#3的ASCII为:0000 0011,即两位 s = i.bit_length() print ...

  2. 跟着ALEX 学python day2 基础2 模块 数据类型 运算符 列表 元组 字典 字符串的常用操作

    声明 : 文档内容学习于 http://www.cnblogs.com/xiaozhiqi/  模块初始: Python的强大之处在于他有非常丰富和强大的标准库和第三方库,几乎你想实现的任何功能都有相 ...

  3. python day2:python 初识(二)

    大纲: 一.运算符 1.算数运算符 notice: 除法运算在python2.7和python3.x 的不同 2.比较运算符 3.赋值运算符 4.逻辑运算符 5.成员运算符 二.基本数据类型和方法介绍 ...

  4. python学习日记(基础数据类型及其方法02)

    python的变量 python中的变量不需要声明,变量载使用前必须被赋值,变量被赋值以后才会被创建. 在python中变量就是变量,没有数据类型.我们所说的类型是变量所指向内存中的对象的类型. py ...

  5. python全栈开发笔记---------数据类型---字典方法

    def clear(self) 清空字典里所有元素 # info = { # "k1":18, # "k2":True, # "k3":[ ...

  6. python开发基础(二)常用数据类型调用方法

    1 数字: int 2 3 int : 转换,将字符串转化成数字 4 num1 = '123' 5 num2 = int (a) 6 numadd = num2 +1000 7 print(num2) ...

  7. Python day2 ---python基础2

    本节内容 列表. 元组操作 购物车程序 字符串操作 字典操作 3级菜单 作业(购物车优化) 1. 列表操作 1.定义列表names = ['Alex',"Tenglan",'Eri ...

  8. Python数据类型及其方法详解

    Python数据类型及其方法详解 我们在学习编程语言的时候,都会遇到数据类型,这种看着很基础也不显眼的东西,却是很重要,本文介绍了python的数据类型,并就每种数据类型的方法作出了详细的描述,可供知 ...

  9. python的list()列表数据类型的方法详解

    一.列表 列表的特征是中括号括起来的,逗号分隔每个元素,列表中的元素可以是数字或者字符串.列表.布尔值......等等所有类型都能放到列表里面,列表里面可以嵌套列表,可以无限嵌套 字符串的特征是双引号 ...

随机推荐

  1. postgresql 所有聚合函数整理

    SELECT DISTINCT(proname) FROM pg_proc WHERE proisagg order by proname 查所有 SELECT * FROM pg_proc WHER ...

  2. test20190904

  3. Qt编写气体安全管理系统19-端口管理

    一.前言 所有设备的信息配置,主要就三大点:端口管理.控制器管理.探测器管理,整个硬件系统的架构是有多个不同的通信端口(主要是串口和网络),每个通信端口下面挂着多个控制器(每个控制器都有唯一的地址,从 ...

  4. 123457123456#1#----com.MC.EnglishGame98--前拼后广--jp英语-mc

    com.MC.EnglishGame98--前拼后广--jp英语-mc

  5. build doris 0.11.5 on centos 7/ubuntu

    doris has envolved many thirdparty components since v0.9. so the build progress has changed a lot si ...

  6. html中的<pre>标签

    定义和用法 pre 元素可定义预格式化的文本.被包围在 pre 元素中的文本通常会保留空格和换行符.而文本也会呈现为等宽字体. <pre> 标签的一个常见应用就是用来表示计算机的源代码. ...

  7. 【Leetcode_easy】993. Cousins in Binary Tree

    problem 993. Cousins in Binary Tree 参考 1. Leetcode_easy_993. Cousins in Binary Tree; 完

  8. 网页布局 CSS实现DIV并列等高

    同事去笔试遇到的问题 要求3列div根据内容的变化通过css实现等高 效果图: 原理: 同列的div设置一个父级 overflow:hidden 超出部分隐藏 给同列的div设置css margin- ...

  9. <统计学>统计学开篇

    我们或多多少都接触学习过统计学,可统计学到底是一种什么样的学科呢? 我们将统计学定义为:对数据进行收集.整理.展示.分析和解释,以帮助人们更有效地进行决策的科学. 关于统计学的研究通常分为两类:描述统 ...

  10. tomcat配置SLL证书

    1.将jks证书复制到conf目录下 2.解除注释:88行至96行 修改代码 <Connector port="443" protocol="org.apache. ...