一. 基础数据类型
基础数据类型有以下几种:
整数(int)
字符串(str)
布尔值(bool)
列表(list)
元组(tuple)
字典(dict)
集合(set)
二. 整数—— int
这里主要熟悉二进制与十进制之间的对应关系与相互转化的方法:
1). 二进制与十进制的关系
i = 4
print(i.bit_length()) # 3
# 获取十进制转化成二进制的有效位数
二进制 十进制
0000 0100 4
# 这里二进制中的 100 即是有效位数
2). 二进制与十进制之间的转化
二进制转化成十进制
示例:
二进制 0010 1101
0 0 1 0 1 1 0 1
0*2**7 + 0*2**6 + 1*2**5 + 0*2**4 + 1*2**3 + 1*2**2 + 0*2**1 + 1*2**0
十进制结果就是上面这行所有乘积的和
十进制转化成二进制
方法:对2取余 逆向排列
比如十进制数 42
除法 商 余数
42/2 21 0
21/2 10 1
10/2 5 0
5/2 2 1
2/2 1 0
1/2 0 1
这里不够8位,直接补0即可,所以42对应的二进制(逆向排序)是 00101010
PS:前面的两个 0 是补上去的.
补充:
1 a = int(" 56 ") 2 b = int("56") 3 c = int(" 5 6") 4 5 print(a) # 56 6 print(b) # 56 7 print(c) # 报错
三. 字符串—— str
1. 字符串的索引与切片
1 # 注意:字符串的切片索引以及常用操作方法,都是形成新的字符串,与原来的字符串没有关系 2 3 s = [1, 2, 3] 4 s1 = s[0] 5 print(s == s1) # False
1 s = "12345678" 2 3 s[-2::-2] 4 5 # 这种题首先看最后一个,是 -2, 即负数 6 # 所以首尾要颠倒,即从右往左数 7 # 再看第一个数是 -2,这里所指的是 7 8 # 就是说从 7 开始往左执行切片操作 9 # 然后中间没写什么,代表一直从 7 到 1 取片 10 # 最后 步长是 2, 所以结果就是 "7531" 11 12 s[-2:-1:-1] 13 # 按照上面步骤,从 7 开始往左取片 14 # 但是 -1 指的是 8 ,8 在 7 的右边,7 往左永远与 8 没关系 15 # 因此这个的结果是 "", 即空字符串,取不到任何东西 16 17 s[-2:7:-1] 18 # 仔细观察发现其实这个和上面的 s[-2:-1:-1]是一样的 19 # 即 7 指的也是从左往右索引号是 7 对应的值,即 8 20 21 s[-2:0:0] 22 # 这里步长是0 ,所以不看前面就知道会报错 23 24 s[-2:-9:-2] 25 # 结果也是 "7531" 26 # s[-2:-100:-2] 也是一样 27 28 # 另外,时刻记住一点:顾头不顾尾!
2. 字符串常用方法:
1). capitalize() 与 title() —— 首字母大写与所有单词的首字母大写
1 s = 'alex wusir9Taibai$xiaoHu' 2 3 # capitalize() — 第一个单词的首字母大写,其他单词都是小写(!!!) 4 s3 = s.capitalize() 5 # Alex wusir9taibai$xiaohu 6 7 # 如果该字符串的第一个字符不是字母,那么capitalize() 就没起作用了 8 s = "7#dakj$kdjl(dkak)dka" 9 s.capitalize() 10 # 7#dakj$kdjl(dkak)dka 11 12 13 # title()— 非字母隔开的每个单词的首字母大写 14 s = 'alex wusir9Taibai$xiaoHu' 15 s4 = s.title() 16 # Alex Wusir9Taibai$Xiaohu
2). center() —— 将字符串居中
1 s = "居中" 2 3 s5 = s.center(20) 4 s6 = s.center(20, "*") 5 6 print(s5) # 居中 7 print(s6) # *********居中********* 8 9 # 可以设置总长度,可以设置填充物
3). swapcase() —— 字母大小写翻转
1 s = 'TAiBai' 2 3 s7 = s.swapcase() 4 print(s7) # taIbAI
4). upper() 与 lower() —— 单词全部大小写
1 s = 'taibaiJInXing' 2 3 s8 = s.upper() 4 s9 = s.lower() 5 6 print(s8) # TAIBAIJINXING 7 print(s9) # taibaijinxing 8 9 # 这两种用法可以用在比如验证码之类 10 11 username = input('请输入姓名:') 12 password = input('请输入密码:') 13 code = 'AeTrd'.upper() 14 your_code = input('请输入验证码:').upper() # 这里是关键点 15 16 if your_code == code: 17 if username == 'alex' and password == '123': 18 print('登录成功') 19 else: 20 print('用户名或者密码错误') 21 else: 22 print('验证码不正确')
5). startswith() 与 endswith() —— 判断是否以某些元素开始或结束
1 s = 'alexeaaa' 2 3 print(s.startswith('a')) # True 4 print(s.startswith('alex')) # True 5 print(s.startswith('e',2,)) # True # 可切片
6). find() 与 index() —— 在字符串中查找某元素是否存在及存在的位置(从0开始计数)
1 s = 'taibaijinxing' 2 3 print(s.find('a')) # 1 4 print(s.find('a',2,)) # 4 5 print(s.find('X')) # -1 6 print(s.index('X')) # 报错 7 8 # find() —— 通过元素找索引,找到第一个就返回(可切片),找不到返回-1 9 # index() —— 通过元素找索引,找到第一个就返回(可切片),找不到报错 10 # 通过比较可知,能用 find() 就用它,以免使用 index() 时引起不必要的报错
7). strip() —— 默认去除字符串前后两端的空格,换行符及制表符
1 name='*barry**' 2 3 print(name.strip('*')) # barry 4 print(name.lstrip('*')) # barry** 5 print(name.rstrip('*')) # *barry 6 7 # 在程序的应用场景一般是用户对于验证码的输入 8 # 因为验证码输入大小写都是可以的,所以程序必须判定只要内容相同,用户的输入就可以通过 9 10 # 应用举例: 11 username = input('请输入姓名:').strip() 12 password = input('请输入密码:').strip() 13 if username == 'alex' and password == '123': 14 print('登录成功') 15 else: 16 print('用户名或者密码错误')
17
18 以后用 input()用法时后面一定要加个 .strip()
8). split() —— 以某条件分割,最终形成一个不含有这个分割符的元素的列表
(字符串转化为列表的方法)
1 # 默认以空格分割 2 3 s = 'wusir alex taibai' 4 ss = 'wusir:alex:taibai' 5 sss = 'taibai:alex:wusir:xiaohu:日天' 6 ssss = ':wusir:alex:taibai' 7 8 s10 = s.split() # ['wusir', 'alex', 'taibai'] 9 s11 = ss.split(":") # ['wusir', 'alex', 'taibai'] 10 s12 = sss.split(":", 1) # ['taibai', 'alex:wusir:xiaohu:日天'] 11 s13 = ssss.split(":") # ['', 'wusir', 'alex', 'taibai'] 12 13 # 由 s13 可知分割出的元素要比分隔符数+1
14 # rspilt()—— 从右到左分割
15 s = "alex wusir ritian"
16 print(s.split(" ", 1)) # ["alex", "wusir ritian"]
17 print(s.rsplit(" ", 1)) # ["alex wusir", "ritian"]
18 # 注意看结果对比
19
20 # 注意使用 split()默认以空格分隔 与 split(" ")(里面一个空格)的区别
21 s = "alex taibai"
22 print(s.split()) # ['alex', 'taibai']
23 print(s.split(" ")) # ['alex', '', '', 'taibai']
24 # 可以看出,split() 使用默认方式会把元素之间的所有空格当成一个空格来分割
25 # 而如果在括号里指定以多少个空格来分割的话就会出现问题
9). join()
1 # 这种方法可以用于 列表转变成字符串 2 # 条件是必须全部都是字符串组成的列表 3 4 s = ['wusir', 'alex', 'taibai'] 5 ss = 'alex' 6 s14 = "_".join(ss) 7 s15 = " ".join(s) 8 9 print(s14) # a_l_e_x 10 print(s15) # wusir alex taibai
10). replace()
1 s = 'Alex 是老男孩的创始人之一,Alex也是一个屌丝,Alex' 2 s11 = s.replace('Alex', '日天', 1) 3 4 print(s11) # 日天 是老男孩的创始人之一,Alex也是一个屌丝,Alex
11). format 格式化输出
1 # 第一种方式: 2 3 s = '我叫{}, 今年{}, 性别{}'.format('小虎', 25, '女') 4 print(s) # 我叫小虎, 今年25, 性别女 5 6 # 第二种方式 7 # 注意这里的用法 8 9 s = '我叫{0}, 今年{1}, 性别{2},我依然叫{0}'.format('小虎', 25, '女') 10 print(s) # 我叫小虎, 今年25, 性别女,我依然叫小虎 11 12 # 第三种方式 13 s = '我叫{name}, 今年{age}, 性别{sex},我依然叫{name}'.format(age=25, sex='女',name='小虎',) 14 15 print(s) # 我叫小虎, 今年25, 性别女,我依然叫小虎
12). is 系列
1 name = 'taibai123' 2 print(name.isalnum()) #字符串由字母或数字组成 # True 3 print(name.isalpha()) #字符串只由字母组成 # False 4 print(name.isdigit()) # 字符串只由数字组成 # False 5 6 # 注意在这里的用法 7 # 比如购物后付钱,要用户输入前,如果不小心输入"1000a",会报错,可以这样: 8 money = input('>>>') 9 if money.isdigit(): 10 money = int(money)
11
12 # 这里注意很奇怪的一点:
13 is.alpha() 这个用法只要是字母,中文,外文都是 True!!!
13). count() —— 计算字符串中某个字符出现的次数
1 s = 'fjdsklf;jdskafjdsaflsdfsdfsdafsdgsfda' 2 3 print(s.count('f')) # 8 4 print(s.count('f',1,)) # 7 5 6 # 在 name = "Alex lxnb" 这个变量中,如何判断这个变量的前四位字母中关于 "l" 出现的次数? 7 # 方法一: 8 n = name[:4] 9 print(n.count("l")) # 1 10 11 # 方法二: 12 # 要算出现几次,首先想到 count 方法 13 # 然后在 Pycharm 中输入 "count" 选中它,按 Ctrl 键,点击这个单词 14 # 这时会跳出一个 py 文件,专门介绍 count 用法,然后发现可以这样: 15 print(name.count("l", 0, 4) # 1
14). len()
1 s = 'fdskafl12431 fdkslfjsdlfksjd' 2 3 print(len(s)) # 30 4 5 # 延申用法 6 s = "jasdjlk" 7 num1 = 0 8 while 1: 9 print(s[num1]) 10 num1 = num1 + 1 11 if num1 == len(s): 12 break
15). 列表嵌套的一个小技巧
1 li = [1, 2, 3, [44, 55], 66] 2 3 for i in li: 4 if type(i) == list: 5 for j in i: 6 print(j) 7 else: 8 print(i)
# 把下面列表中66之前的数放到字典的键key1对应的值的列表中,把之后的数放到key2对应的值的列表中 # 前提条件:前三行不能变 # li = [11, 22, 33, 44, 55, 77, 88, 99] # dic = {} # for i in li: li = [11, 22, 33, 44, 55, 77, 88, 99] dic = {} for i in li: if i < 66: if "key1" not in dic: dic["key1"] = [i] else: dic["key1"].append(i) else: if "key2" not in dic: dic["key2"] = [i] else: dic["key2"].append(i) print(dic) # {'key1': [11, 22, 33, 44, 55], 'key2': [77, 88, 99]} # 还可以这样:li = [11, 22, 33, 44, 55, 77, 88, 99]dic = {}for i in li: if i < 66: if "key1" not in dic: dic["key1"] = [] dic["key1"].append(i) else: if "key2" not in dic: dic["key2"] = [] dic["key2"].append(i)
print(dic)