1.模块初识
Python的强大之处在于他有非常丰富和强大的标准库和第三方库,几乎你想实现的任何功能都有相应的Python库支持。
sys
#!/usr/bin/env python # -*- coding: utf-8 -*- import sys print(sys.argv) #输出 $ python test.py helo world ['test.py', 'helo', 'world'] #把执行脚本时传递的参数获取到了
os
#!/usr/bin/env python # -*- coding: utf-8 -*- import os os.system("df -h") #调用系统命令 cmd_result=os.popen("dir").read() #调用系统命令并赋值 print(cmd_result) #打印
完全结合一下
import os,sys os.system(''.join(sys.argv[1:])) #把用户的输入的参数当作一条命令交给os.system来执行
2.数据类型
1.数字
int(整型)在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647,在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807
long(长整型)#python3里都是int而没有long
float(浮点数)
complex(复数)
name_list = ['alex', 'seven', 'eric'] 或 name_list = list(['alex', 'seven', 'eric'])
基本操作:索引、切片、追加、删除、长度、切片、循环、包含
names = ["zhangsan", "lisi", "wangwu", "liuer"] print(names) # 切片 print(names[0]) print(names[:2]) print(names[1:3]) print(names[-3:]) #0和-1都可以省约 print(names[0:-1:2]) #2表示步长 print(names[names.index("lisi")]) # 追加 names.append("wuerwa") print(names) # 插入 names.insert(1, "zhangerwa") print(names) # 修改 names[2] = "liusan" print(names) # 删除 #names.remove("wuerwa") #del names[2] names.pop() #默认删除列表中最后一个 print(names) print(names.count("liusan")) #统计个数 #names.clear() #清空 names.reverse() #反转 print(names) names.sort() #排序 print(names) names2=[1,2,3] names.extend(names2) #扩展 print("++++++++++++++++",names) ''' #拷贝 浅拷贝,三种方式 names.copy() names[:] #完全切片 list(names) #list工厂函数 ''' names_copy=names.copy() print(names_copy) import copy name2=copy.deepcopy(names) #深拷贝 print(name2) #循环 for item in names: print(item)
5、元组(不可变列表)
创建元组:
ages = (11, 22, 33, 44, 55) 或 ages = tuple((11, 22, 33, 44, 55))
6、字典(无序)
创建字典:
person = {"name": "mr.wu", 'age': 18} 或 person = dict({"name": "mr.wu", 'age': 18})
常用操作:索引、新增、删除、(键、值、键值对)、循环、长度
7、数据类型转换
int(x [,base]) |
将x转换为整数。如果x是字符串,则要base指定基数。 |
float(x) |
将x转换为浮点数。 |
complex(real [,imag]) |
创建一个复数。 |
str(x) |
将对象x转换为字符串表示形式。 |
repr(x) |
将对象x转换为表达式字符串。 |
eval(str) |
评估求值一个字符串并返回一个对象。 |
tuple(s) |
将s转换为元组。 |
list(s) |
将s转换为列表。 |
set(s) |
将s转换为集合。 |
dict(d) |
创建一个字典,d必须是(key,value)元组的序列 |
frozenset(s) |
将s转换为冻结集 |
chr(x) |
将整数x转换为字符 |
unichr(x) |
将整数x转换为Unicode字符。 |
ord(x) |
将单个字符x转换为其整数值。 |
hex(x) |
将整数x转换为十六进制字符串。 |
oct(x) |
将整数x转换为八进制字符串。 |
3.数据运算
算术运算:
运算符 |
描述 |
示例 |
+ |
加法运算,将运算符两边的操作数增加。 |
a + b = 31 |
- |
减法运算,将运算符左边的操作数减去右边的操作数。 |
a – b = -11 |
* |
乘法运算,将运算符两边的操作数相乘 |
a * b = 210 |
/ |
除法运算,用右操作数除左操作数 |
b / a = 2.1 |
% |
模运算,用右操作数除数左操作数并返回余数 |
b % a = 1 |
** |
对运算符进行指数(幂)计算 |
a ** b,表示10的21次幂 |
// |
地板除 - 操作数的除法,其结果是删除小数点后的商数。 但如果其中一个操作数为负数,则结果将被保留,即从零(向负无穷大)舍去 |
9//2 = 4 , 9.0//2.0 = 4.0, -11//3 = -4, -11.0//3 = -4.0 |
比较运算:
运算符 | 描述 | 示例 |
---|---|---|
== |
如果两个操作数的值相等,则条件为真。 |
(a == b) 求值结果为 false
|
!= |
如果两个操作数的值不相等,则条件为真。 |
(a != b) 求值结果为 true
|
> |
如果左操作数的值大于右操作数的值,则条件成为真。 |
(a > b) 求值结果为 false
|
< |
如果左操作数的值小于右操作数的值,则条件成为真。 |
(a < b) 求值结果为 true
|
>= |
如果左操作数的值大于或等于右操作数的值,则条件成为真。 |
(a >= b) 求值结果为 false
|
<= |
如果左操作数的值小于或等于右操作数的值,则条件成为真。 |
(a <= b) 求值结果为 true
|
赋值运算:
运算符 | 描述 | 示例 |
---|---|---|
= |
将右侧操作数的值分配给左侧操作数 |
c = a + b 表示将a + b 的值分配给c
|
+= |
将右操作数相加到左操作数,并将结果分配给左操作数 |
c + = a 等价于c = c + a
|
-= |
从左操作数中减去右操作数,并将结果分配给左操作数 |
c -= a 等价于 c = c - a
|
*= |
将右操作数与左操作数相乘,并将结果分配给左操作数 |
c *= a 等价于 c = c * a
|
/= |
将左操作数除以右操作数,并将结果分配给左操作数 |
c /= a 等价于 c = c / a
|
%= |
将左操作数除以右操作数的模数,并将结果分配给左操作数 |
c %= a 等价于 c = c % a
|
**= |
执行指数(幂)计算,并将值分配给左操作数 |
c **= a 等价于 c = c ** a
|
//= |
运算符执行地板除运算,并将值分配给左操作数 |
c //= a 等价于 c = c // a
|
逻辑运算:
运算符 | 描述 | 示例 |
---|---|---|
and |
如果两个操作数都为真,则条件成立。 |
(a and b) 的结果为False
|
or |
如果两个操作数中的任何一个非零,则条件成为真。 |
(a or b) 的结果为True
|
not |
用于反转操作数的逻辑状态。 |
not(a and b) 的结果为True 。 |
成员运算:
运算符 | 描述 | 示例 |
---|---|---|
in |
如果在指定的序列中找到一个变量的值,则返回true ,否则返回false 。 |
- |
not in |
如果在指定序列中找不到变量的值,则返回true ,否则返回false 。 |
- |
身份运算:
运算符 | 描述 | 示例 |
---|---|---|
is |
如果运算符任一侧的变量指向相同的对象,则返回True ,否则返回False 。 |
|
is not |
如果运算符任一侧的变量指向相同的对象,则返回True ,否则返回False 。 |
- |
位运算:
运算符 | 描述 | 示例 |
---|---|---|
& |
如果它存在于两个操作数中,则操作符复制位到结果中 |
(a & b) 结果表示为 0000 1100
|
如果它存在于任一操作数,则复制位。 | (ab) = 61 结果表示为 0011 1101
|
|
^ |
二进制异或。如果它是一个操作数集合,但不是同时是两个操作数则将复制位。 |
(a ^ b) = 49 (结果表示为 0011 0001 ) |
~ |
二进制补码,它是一元的,具有“翻转”的效果。 |
(~a ) = -61 有符号的二进制数,表示为1100 0011 的补码形式。 |
<< |
二进制左移,左操作数的值由右操作数指定的位数左移。 |
a << 2 = 240 (结果表示为 1111 0000 ) |
>> |
二进制右移,左操作数的值由右操作数指定的位数右移。 |
a >> 2 = 15 (结果表示为0000 1111 ) |
#!/usr/bin/env python # -*- coding:utf-8 -*- a = 60 # 60 = 0011 1100 b = 13 # 13 = 0000 1101 print ('a=',a,':',bin(a),'b=',b,':',bin(b)) c = 0 c = a & b; # 12 = 0000 1100 print ("result of AND is ", c,':',bin(c)) c = a | b; # 61 = 0011 1101 print ("result of OR is ", c,':',bin(c)) c = a ^ b; # 49 = 0011 0001 print ("result of EXOR is ", c,':',bin(c)) c = ~a; # -61 = 1100 0011 print ("result of COMPLEMENT is ", c,':',bin(c)) c = a << 2; # 240 = 1111 0000 print ("result of LEFT SHIFT is ", c,':',bin(c)) c = a >> 2; # 15 = 0000 1111 print ("result of RIGHT SHIFT is ", c,':',bin(c))
运算符优先级:
序号 | 运算符 | 描述 |
---|---|---|
1 | ** |
指数(次幂)运算 |
2 |
~ + -
|
补码,一元加减(最后两个的方法名称是+@ 和-@ ) |
3 |
* / % //
|
乘法,除法,模数和地板除 |
4 |
+ -
|
|
5 |
>> <<
|
向右和向左位移 |
6 | & |
按位与 |
7 |
^
|
按位异或和常规的“OR ” |
8 |
<= < > >=
|
比较运算符 |
9 |
<> == !=
|
等于运算符 |
10 |
= %= /= //= -= += *= **=
|
赋值运算符 |
11 |
is is not
|
身份运算符 |
12 |
in not in
|
成员运算符 |
13 |
not or and
|
逻辑运算符 |
三元运算
result
=
值
1
if
条件
else
值
2
a,b,c=10,22,50 d=a if a>b else c; print(d)
如果条件为真:result = 值1
如果条件为假:result = 值2
bytes
a='€20'.encode('utf-8') print(a) b=a.decode('utf-8') print(b)
程序练习
程序:购物车程序
需求:
- 启动程序后,让用户输入工资,然后打印商品列表
- 允许用户根据商品编号购买商品
- 用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
- 可随时退出,退出时,打印已购买商品和余额
product_list = [ ('Iphone',5800), ('Mac Pro',9800), ('Bike',800), ('Watch',10600), ('Coffee',31), ('Alex Python',120), ] shopping_list = [] salary = input("Input your salary:") if salary.isdigit(): salary = int(salary) while True: for index,item in enumerate(product_list): #print(product_list.index(item),item) 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] if p_item[1] <= salary: #买的起 shopping_list.append(p_item) salary -= p_item[1] print("Added %s into shopping cart,your current balance is \033[31;1m%s\033[0m" %(p_item,salary) ) else: print("\033[41;1m你的余额只剩[%s]啦,还买个毛线\033[0m" % salary) else: print("product code [%s] is not exist!"% user_choice) elif user_choice == 'q': print("--------shopping list------") for p in shopping_list: print(p) print("Your current balance:",salary) exit() else: print("invalid option")
字典操作
字典一种key - value 的数据类型,使用就像我们上学用的字典,通过笔划、字母来查对应页的详细内容。
语法:
info={"one":"dehua","two":"xueyou","three":"liming"} print(info) ##{'one': 'dehua', 'two': 'xueyou', 'three': 'liming'}
字典的特性:
- dict是无序的
- key必须是唯一的,so 天生去重
增加
info["four"]="fucheng" print(info) ##{'one': 'dehua', 'two': 'xueyou', 'three': 'liming', 'four': 'fucheng'}
修改
info["four"]="富城" print(info) ##{'one': 'dehua', 'two': 'xueyou', 'three': 'liming', 'four': '富城'}
删除
#info.pop("four") #第一种方式 del info["four"] #第二种方式 info.popitem() #随便删除 print(info)
查找
print("one" in info) #判断是否存在 print(info.get("one")) print(info["four"]) #如果一个key不存在,就报错,get不会,不存在只返回None
其它方法
print(info.values()) print(info.keys()) info.setdefault("five","linfeng") info.setdefault("one","linfeng") b={1:2,3:4,"one":"hehe"} info.update(b) print(info) d=info.items() print(d)
字典循环:
for i in info: print(i,info[i]) for k,v in info.items(): print(k,v)
字符串转字典:
json越来越流行,通过python获取到json格式的字符串后,可以通过eval函数转换成dict格式:
a='{"name":"yct","age":10}' eval(a)
字典转字符串:
import json dict={"中国":"china"} str=json.dumps(dict,ensure_ascii=False) print(str)
文件IO:
w新建只写,w+新建读写,二者都会将文件内容清零
字符串内建函数
方法 |
示例 |
说明 |
capitalize() |
str = "this is string example....wow!!!" print ("str.capitalize() : ", str.capitalize()) |
把字符串的第一个字母转为大写 |
center(width, fillchar) |
str = "this is string example....wow!!!" |
返回使用fillchar填充的字符串,原始字符串以总共width列为中心。 |
count(str, beg = 0,end = len(string)) |
str = "this is string example....wow!!!" |
计算字符串中出现有多少次str或字符串的子字符串(如果开始索引beg和结束索引end,则在beg~end范围匹配)。 |
decode(encoding = ‘UTF-8’,errors = ‘strict’) |
str = "this is string example....wow!!!"; |
使用编码encoding解码该字符串。 编码默认为默认字符串encoding。 |
encode(encoding = ‘UTF-8’,errors = ‘strict’) |
import base64 |
返回字符串的编码字符串版本; 在错误的情况下,默认是抛出ValueError,除非使用’ignore‘或’replace‘给出错误。 |
endswith(suffix, beg = 0, end = len(string)) |
str = "this is string example....wow!!!"; |
确定字符串或字符串的子字符串(如果启动索引结束和结束索引结束)都以后缀结尾; 如果是则返回true,否则返回false。 |
expandtabs(tabsize = 8) |
str = "Welcome\tto\tyiibai python toturitals!" |
将字符串中的制表符扩展到多个空格; 如果没有提供tabize,则默认为每个制表符为8个空格。 |
find(str, beg = 0 end = len(string)) |
str1 = "this is string example....wow!!!" |
如果索引beg和结束索引end给定,则确定str是否在字符串或字符串的子字符串中,如果找到则返回索引,否则为-1。 |
string.format()
|
print("{} {}".format("hello", "world")) # 不设置指定位置,按默认顺序 print("{0} {1}".format("hello", "world")) # 设置指定位置 |
格式化字符串 |
index(str, beg = 0, end = len(string)) |
str1 = "this is string example....wow!!!" |
与find()相同,但如果没有找到str,则引发异常。 |
isalnum() |
str = "this2009"; # 字符中没有空格 |
如果字符串至少包含1个字符,并且所有字符均为数字,则返回true,否则返回false。 |
isalpha() |
str = "this"; # No space & digit in this string |
如果字符串至少包含1个字符,并且所有字符均为字母,则返回true,否则返回false。 |
isdigit() |
str = "1231234"; # Only digit in this string |
如果字符串只包含数字则返回true,否则返回false。 |
islower() |
str = "Welcom to yiibai python tutorials!" |
如果字符串至少包含1个字母,并且所有字符均为小写,则返回true,否则返回false。 |
isnumeric() |
str = "this2018" |
如果unicode字符串只包含数字字符,则返回true,否则返回false。 |
isspace() |
str = " " |
如果字符串只包含空格字符,则返回true,否则返回false。 |
istitle() |
str = "This Is String Example...Wow!!!" |
如果字符串正确“标题大小写”,则返回true,否则返回false。 |
isupper() |
str = "THIS IS STRING EXAMPLE....WOW!!!" |
如果字符串至少包含一个可变大小写字符,并且所有可变大小写字符均为大写,则返回true,否则返回false。 |
join(seq) |
s = "-" |
将序列seq中的元素以字符串表示合并(并入)到具有分隔符字符串的字符串中。 |
len(string) |
str = "Welcom to yiibai python tutorials!" |
返回字符串的长度 |
ljust(width[, fillchar]) |
str = "this is string example....wow!!!" |
返回一个空格填充的字符串,原始字符串左对齐到总共width列。 |
lower() |
str = "THIS IS STRING EXAMPLE....WOW!!!" |
将字符串中的所有大写字母转换为小写。 |
lstrip() |
## 删除左侧字符串:空格 |
删除字符串中的所有前导空格 |
maketrans() |
intab = "aeiou" |
返回在translate函数中使用的转换表。 |
max(str) |
str = "this is a string example....really!!!" |
从字符串str返回最大字母字符。 |
min(str)
|
str = "this is a string example....really!!!" |
从字符串str返回最小字母字符。 |
string.partition(str) |
str = "www.runoob.com" print(str.partition(".")) |
有点像 find()和 split()的结合体,从 str 出现的第一个位置起,把 字 符 串 string 分 成 一 个 3 元 素 的 元 组 (string_pre_str,str,string_post_str),如果 string 中不包含str 则 string_pre_str == string. |
replace(old, new [, max]) |
str = "this is string example....wow!!! this is really string" |
如果给定max值,则用new或最多最大出现替换字符串中所有出现的旧字符(old)。 |
rindex( str, beg = 0, end = len(string)) |
str1 = "this is really a string example....wow!!!" |
与index()相同,但在字符串中向后搜索。 |
rjust(width,[, fillchar]) |
str = "this is string example....wow!!!" |
返回一个空格填充字符串,原始字符串右对齐到总共宽度(width)列。 |
rstrip() |
str = " this is string example....wow!!! " |
删除字符串的所有尾随空格。 |
split(str= |
str = "this is string example....wow!!!" |
根据分隔符str(空格,如果没有提供)拆分字符串并返回子字符串列表; 如果给定,最多分割为num子串。 |
splitlines( num=string.count(‘\n’)))”) |
str1 = 'ab c\n\nde fg\rkl\r\n' |
全部拆分字符串(或num)新行符,并返回每行的列表,并删除新行符。 |
startswith(str, beg=0,end=len(string)) |
str = "this is string example....wow!!!" |
确定字符串或字符串的子字符串(如果给定起始索引beg和结束索引end)以str开头; 如果是则返回true,否则返回false。 |
strip([chars]) |
str = "*****this is string example....wow!!!*****" |
对字符串执行lstrip()和rstrip() |
swapcase() |
str = "this is string example....wow!!!" |
反转在字符串中的所有字母大小写,即小写转大写,大写转小写。 |
title() |
str = "this is string example....wow!!!" |
返回字符串的标题版本,即所有单词第一个字母都以大写开头,其余的都是小写的。 |
translate(table, deletechars= |
intab = "aeiou" |
根据转换表STR(256个字符),除去那些在del字符串转换字符串。 |
upper() |
str = "this is string example....wow!!!" |
将字符串中的小写字母转换为大写。 |
zfill(width) |
str = "this is string example....wow!!!" |
返回原始字符串,左边填充为零,总共有宽度(width)字符; 对于数字zfill()保留给定的任何符号(少于一个零)。 |
isdecimal() |
str = "this2018" |
如果unicode字符串只包含十进制字符,则返回true,否则返回false。 |