1.1.运算符优先级
序号 | 运算符 |
---|---|
1 | 圆括号 |
2 | 幂运算符 ** |
3 | 负号 - |
4 | 乘 *、除 /、整除 //、取余 % |
5 | 加 +、减 - |
1.2.
1.3.数字格式化输出 format
x = 1234.56789 # 小数点后保留两位数,输出结果:'1234.57' print(format(x, '0.2f')) # 数字在12个字符长度的区域内右对齐,并保留小数点后1位数字,输出结果:' 1234.6' print(format(x, '>12.1f')) # 数字在12个字符长度的区域内左对齐,并保留小数点后3位数字,紧接着输出20,输出结果:'1234.568 20' print(format(x, '<12.3f'), 20) # 数字在12个字符长度的区域内右对齐,并保留小数点后1位数字,数字前面补0,输出结果:'0000001234.6' print(format(x, '0>12.1f')) # 数字在12个字符长度的区域内左对齐,并保留小数点后1位数字,数字后面补0,输出结果:'1234.6000000' print(format(x, '0<12.1f')) # 数字在12个字符长度的区域内中心对齐,并保留小数点后2位数字,紧接着输出3,输出结果:' 1234.57 3' print(format(x, '^12.2f'),3) # 每千位用逗号(,)分隔,输出结果:1,234.56789 print(format(x, ',')) # 每千位用逗号(,)分隔,并保留小数点后2位数字,输出结果:1,234.57 print(format(x, ',.2f')) # 用科学计数法形式输出数字,输出结果:1.234568e+03 print(format(x, 'e')) # 用科学计数法形式输出数字,尾数保留小数点后2位数字,输出结果:1.23E+03 print(format(x, '0.2E'))
2.1.
2.2.类型转换
函数 | 描述 |
---|---|
int(x) | 将x转换为十进制整数 |
float(x) | 将x转换到浮点数 |
complex(real [,imag]) | 创建一个复数 |
str(x) | 将对象 x 转换为字符串 |
list(s) | 将序列 s 转换为列表 |
tuple(s) | 将序列 s 转换为元组 |
chr(x) | 将整数x转换为字符 |
ord(x) | 将字符x转换为整数值 |
oct(x) | 将整数x转换为八进制字符串 |
hex(x) | 将整数x转换为十六进制字符串 |
4.1.
1.1.print函数:
print(a,b,c,d,e,f,g)
1.2.序列解包、链式赋值、增量赋值
1.3.缩进
2.1.布尔值和布尔变量
print(bool("")) #False print(bool('')) #False print(bool("Hello")) #True print(bool([])) #False print(bool([1,2,3])) #True print(bool(0)) #False print(bool(20)) #True
2.2.比较运算符
逻辑表达式 | 描述 |
---|---|
x==y | x等于y? |
x>=y | x大于或等于y? |
x<=y | x小于或等于y? |
x!=y | x不等于y? |
x is y | x和y是同一个对象? |
x is not y | x和y不是同一个对象? |
x in y | x是否是y中的成员? |
x not in y | x是否是y中的成员? |
2.3.if 、else、elif
从if 、else、elif到冒号(:)都是布尔类型的
2.4.assert 断言语句
value=20 assert value<10 or value >30,'value值必须在10~20之间'
直接抛出异常,异常原因:‘value值必需在10~20之间’
3.1.range函数
3.2.
x=0 while x<100: #for i in range (100): print(x) # print(i)
3.3.break跳出循环 continue跳出单次循环
一般都只放在if语句里
4.1.
i={} eval("print(a+b)",i,{'a':1,'b':2})
names = ["Bill", "Mike"] numbers = [1,2,3,4,5,6] salary=[3000.0,4000.0,5000.0] flags = [True,False,True,True] values = [names,numbers,salary,flags,['a','b']] for value in values: print(value)
2.1.索引
a=input()[2] flags = [True,a,True,True] print(flags[1][0]) #输入123,输出3
2.2.切片 也是左闭右开
2.3.序列的加法
print([1,2,3] + [6,7,8]) # 运行结果:[1,2,3,6,7,8] print("Hello" + " world") # 运行结果:Hello world print([1,2,3] + ["hello"]) # 把字符串作为序列的一个元素,运行结果:[1,2,3,"hello"] print([1,2,3] + ['h','e','l','l','o']) # 运行结果:[1,2,3,'h','e','l','l','o'] print([1,2,3] + "hello") # 抛出异常,序列不能和字符串直接相加
2.4.序列的乘法
print('hello' * 5) #hellohellohellohellohello print([20] * 10) # [20, 20, 20, 20, 20, 20, 20, 20, 20, 20]
numbers = [1,6,7] numbers[1:1] = [2,3,4,5]#相当于插入元素,但不会成为二维的 print(numbers) # [1, 2, 3, 4, 5, 6, 7] numbers[1:4] = [] #相当于删除元素 print(numbers) # [1, 5, 6, 7] numbers[9:] =number #相当于尾部添加元素 print(numbers) #[1, 5, 6, 7, 1, 5, 6, 7]
方法 | 作用 |
---|---|
append(x) | 返回列表最后插入新的值x的列表 |
clear() | 返回清空的列表 |
copy() | 返回一个相同序列 |
cout(x) | 返回x出现的次数 |
a.extend(x) | 无返回值,用于连接a和x |
index(x) | 返回x第一次出现的位置 |
insert(x,y) | 返回在x位置插入y的列表 |
pop(x) | 返回x位置的值,并删除该位置的元素 |
remove(x) | 返回删除第一次出现的x的新列表 |
reverse() | 返回倒置摆放的新列表 |
sord() | 返回升序排列的新列表 |
sorded() | 无返回值 |
print("----测试copy方法-----") a = [1,2,3] b = a # a和b指向了同一个列表 b[1] = 30 # 修改列表b的元素值,a列表中对应的元素值也会改变 print(a) # 运行结果:[1, 30, 3] aa = [1,2,3] bb = aa.copy() # bb是aa的副本 bb[1] = 30 # 修改bb中的元素值,aa中的元素值不会有任何变化 print(aa) # 运行结果:[1, 2, 3] print("----测试extend方法-----") #列表+号效率低,不使用 a = [1,2,3] b = [4,5,6] a.extend(b) # 将b列表接在a列表的后面,extend方法并不返回值 print(a) # 运行结果:[1, 2, 3, 4, 5, 6] print("----测试pop方法-----") numbers = [1,2,3] # pop方法返回删除的元素值 print(numbers.pop()) # 删除numbers列表中的最后一个元素值,运行结果:3 print(numbers.pop(0)) # 删除numbers列表中的第1个元素值,运行结果:1 print(numbers) # 运行结果:[2] print("----测试sort方法-----") numbers = [5,4,1,7,4,2] numbers.sort() # 对numbers列表中的元素值按升序排序(默认) print(numbers) # 运行结果:[1, 2, 4, 4, 5, 7] values = [6,5,2,7,"aa","bb","cc"] # 待排序列表的元素类型必须是可比较的,字符串和数值类型不能直接比较,否则会抛出异常 # values.sort() # 抛出异常 # 使用sorted函数 x = [7,6,4,8,5] y = sorted(x) # 对x的副本进行排序 print(x) # 运行结果:[7, 6, 4, 8, 5] print(y) # 运行结果:[4, 5, 6, 7, 8] # sorted函数可以对任何序列进行排序,例如对字符串进行排序 print(sorted("geekori")) # 运行结果:['e', 'e', 'g', 'i', 'k', 'o', 'r'] x = [5,4,1,7,5] x.sort(reverse=True) # 对列表x中的元素值降序排列 print(x) # 运行结果:[7, 5, 5, 4, 1]
5.1.元组的创建:
a=1, b=(1,) c=(1,2,3) print(a,b,c,end="") #(1,) (1,) (1, 2, 3)
5.2.
2.1.三种传参方式
1.元组传参
# 定义字符串模板 formatStr = "Hello %s. Today is %s" # 初始化字符串模板参数值,此处必须使用元组,不能使用列表 values = ('Mike', 'Wednesday') # 格式化字符串 print(formatStr % values)
2.模板字符串Template类
# 引用string模块中的Template类 from string import Template template1 = Template("$s是我最喜欢的编程语言, 而且$s功能强大") # 指定格式化参数s的值是Python print(template1.substitute(s='Python')) # 当格式化参数是一个字符串的一部分时,为了和字符串的其他部分区分开, # 需要用一对大括号将格式化参数变量括起来 template2 = Template("${s}stitute") print(template2.substitute(s='sub'))
3.字符串format()方法
#可以顺序赋值和关键字传参赋值 s3 = "Today is {week}, {},the {} temperature is {degree} degrees." print(s3.format("aaaaa", 77777, degree = 22, week ="Sunday")) #可以关键字传参赋值和指定赋值,1指定77777,0指定aaaaa s4 = "Today is {week}, {1},the {0} temperature is {degree} degrees." print(s4.format("aaaaa", 77777, degree = 22, week ="Sunday")) #可以关键字传参 代换列表名 namelist = ["Bill", "Gates"] print("Mr {name[1]}".format(name = namelist)) #还可以关键字传参 代换模块名 import math s5 = "The {mod.__name__} module defines the value {mod.pi} for PI" print(s5.format(mod = math))
4.fomat()方法和元组传参的类型符
类型符 | 描述 |
---|---|
a | 将字符按Unicode编码输出 |
c | 将整数解释成字符 |
d | 格式化整数 |
s | 格式化字符串 |
u | 格式化无符号整型 |
b | 格式化无符号二进制数 |
o | 格式化无符号八进制数 |
x | 格式化无符号十六进制数 |
X | 格式化无符号十六进制数(大写) |
f | 格式化浮点数,可指定小数点后的精度 |
e | 用科学计数法格式化浮点数 |
E | 作用同e,用科学计数法格式化浮点数 |
g | f和e的简写,低于等于6位是f,高于六位科学计数e |
G | F 和 E 的简写 |
p | 用十六进制数格式化变量的地址 |
% | 将数值格式化成百分比的形式 |
5.字段宽度、精度、对齐、用0填充,用符号填充
from math import * print('{0:<010.2f}\n{0:^010.2f}\n{0:>010.2f}'.format(pi))
from math import * print('{0:@<10.2f}\n{0:@^10.2f}\n{0:@>10.2f}'.format(pi))
方法名 | 描述 |
---|---|
center(a,b) | 返回格式化宽度为a的字符串居中,用b来填充的字符串 |
find(a,b,c) | 返回找第一次出现a的起始位置,从b位置开始到c,左闭右开,没找到返回-1 |
s.join(list) | 将字符串s添加在list列表的每个元素后面 |
s.split(a) | 用a分割字符串s,是join() 的逆方法 |
lower() upper() | 返回全部小写的字符串和全部大写的字符串 |
capwords() | 返回全部英文单词首字母大写的字符串 |
s.replace(a,b) | 将字符串s中的字符串a改为b |
s.strip(" *&") | 截掉字符串前后的" *&" |
#join的用法 list=['1','2','3','4','5'] s="*" print (s.join) #1*2*3*4*5 #strip的用法 print("*** &* Hello& *World**&&&".strip(" *&")) #Hello& *World
s = "I not only like python, but also like kotlin." table= s.maketrans("ak", "$%", " ") print(table) print(len(table)) print(s.translate(table))
1.1.定义字典
#直接定义 d0={'Bill': '1234', 'Mike': '4321', 'Marry': '7753'} #用dict来定义 items=[["Bill","1234"],["Mike","4321"],["Marry","7753"]] d1=dict(items) print(d1) #均输出:{'Bill': '1234', 'Mike': '4321', 'Marry': '7753'}
1.2.字典的基础操作:
取值、赋值、添加键值对、计算键值对数量、查找键、删除键值对
items= {"zero":"零","one":"壹","two":"贰"} #定义 a=items["one"] #取值 print(a) items["two"]="貳" #赋值 items["three"]="叁" #添加键值对 b=len(items) #计算键值对数量 print(b) if "one" in items: print("\"one\" is in items")#查找键 del items["zero"] #删除键值对 print(items)
1.3.用字典格式化字符串
format_map函数将键全部换成值
方法名 | 描述 |
---|---|
s.clear() | 清空字典s中所有元素 |
s.copy(a) s.deepcopy(a) | 返回浅复制和深复制的字典a |
fromkeys() | 返回用键来创建的新字典,每个键对应同样的值,第一个参数是键的序列,第二个参数是对应统一的值 |
get(key,a) | 返回键对应的值,好处是key不存在的时候会返回指定值a,不会抛出异常 |
items() | 返回字典中的所有键值对元组的列表,用于for循环结构进行迭代 |
keys() | 返回字典中的所有键的的列表,用于for循环结构进行迭代 |
value() | 返回字典中值的列表 |
pop() | 返回指定的key-value对,并删除这个键值对(索引都是索的键,不是索的位置,字典里只有键,没有位置) |
popitem() | 返回字典中最后一个key-value,并删除这个键值对 |
setdefault() | 如果键不存在就添加该键值对、如果键存在就忽略不修改,返回的是添加键值对的值,或者忽略不修改的值 |
d1.update(d2) | 用一个字典d2去更新覆盖另一个字典d1 |
1.1.
2.1.
def greet(greeting,name) : return "问候语:"+greeting+" 姓名:"+name print(greet(name="李宁",greeting="Hello")) #问候语:Hello 姓名:李宁
2.2.
2.3.将序列作为参数传入函数
def add1(x,y,z): return x + y + z print(add1(1,2,3)) #6 list = [2,3,4] # 可以用列表或元组 print(add1(*list)) #9 def add2(*numbers): result = 0 for number in numbers: result += number return result print(add2(1,2,3,4,5)) print(add2(*list)) #15 #9 dict = {'x':100, 'y':200, 'z':12} print(add1(**dict)) #321 def add3(**numbers): result = 0 for item in numbers.items(): result += item[1] return result print(add3(**dict)) #312
3.1.
3.2. 阶乘和斐波那契数列
def jc(n): if n == 0 or n == 1: return 1 else: return n * jc(n - 1) print(jc(10)) def fibonacci(n): if n == 1: return 0 elif n == 2: return 1 else: return fibonacci(n - 1) + fibonacci(n - 2) print(fibonacci(10))
私有方法private在py里:
class MyClass: #定义类 def getName(self): return self.name def setName(self, name): self.name = name self.__outName() def __outName(self): print("Name = {}".format(self.name)) myClass = MyClass() #创建对象 import inspect #导入inspect模块,求出一个类里的所有方法名 methods = inspect.getmembers\ (myClass, predicate=inspect.ismethod) for method in methods: print(method[0]) print("------------") myClass.setName("Bill") print(myClass.getName()) myClass._MyClass__outName() #使用myclass对象中的方法实例 #print(myClass.__outName())
输出结果:所以该类中已经不存在outname()方法,改名为了_MyClass__outName()方法
class MyClass: def method1(self): print("method1") my = MyClass() if hasattr(my, 'method1'): my.method1() #method1 else: print("method1方法不存在") def sum(): return 1+2+3+4 method = getattr(my, 'method2',sum) print(method()) #10
3.1.
class YeYe: def f1(self): return 50 class BaBa(YeYe): def f2(self): print("f2") class ErZi(BaBa): def f3(self): print("f3") class MoshengRen: def method(self): return 40 print(issubclass(ErZi, YeYe)) #T print(issubclass(ErZi, BaBa)) #T print(issubclass(ErZi, MoshengRen)) #F print(ErZi.__bases__)#Ba print(BaBa.__bases__)#Ye Sunlight = ErZi() print(isinstance(Sunlight, ErZi))#T print(isinstance(Sunlight, BaBa))#T print(isinstance(Sunlight, YeYe))#T print(isinstance(Sunlight, MoshengRen))#F
class WarpdriveOverloadException(Exception): pass warpSpeed = 12 if warpSpeed >= 10: raise WarpdriveOverloadException\ ("曲速引擎已经过载,请停止或弹出曲速核心,否则飞船将会爆炸")
x = None while True: try: if x == None: x = int(input("请输入分子:")) y = int(input("请输入分母:")) print("x / y = {}".format(x / y)) break; except : print("分母不能为0,请重新输入分母!")
class NegativeException(Exception): pass class ZeroException(Exception): pass class SpecialCalc: def add(self,x,y): if x < 0 or y < 0: raise NegativeException return x + y def sub(self,x,y): if x - y < 0: raise NegativeException return x - y def mul(self,x,y): if x == 0 or y == 0: raise ZeroException return x * y def div(self,x,y): return x / y while True: try: calc = SpecialCalc() expr = input("请输入要计算的表达式,例如,add(1,2):") if expr == ":exit": break; result = eval('calc.' + expr) print("计算结果:{:.2f}".format(result)) except NegativeException: print("******负数异常******") except ZeroException: print("******操作数为0异常******") except ZeroDivisionError: print("******分母不能为0******") except: print("******其他异常******")
1.2.super函数调用父类的方法
class Animal: def __init__(self): print("Animal init") class Bird(Animal): def __init__(self, hungry): super().__init__() self.hungry= hungry def eat(self): if self.hungry: print("已经吃了虫子!") self.hungry = False else: print("已经吃过饭了,不饿了!") b = Bird(False) b.eat() b.eat() class SongBird(Bird): def __init__(self,hungry): super(SongBird,self).__init__(hungry) self.sound = '向天再借五百年' def sing(self): print(self.sound) sb = SongBird(True) sb.sing() sb.eat()
2.1.属性就是成员变量
2.2.监控对象中的属性:
这些特殊方法都是自动调用
class MyClass: name = "Bill" def __init__(self): print("MyClass的构造方法被调用") self.value = 20 @staticmethod def run(): print(MyClass.name) print("MyClass的静态方法run被调用") @classmethod # 这里self是元数据 def do(self): print(self) print(self.name) print('调用静态方法run') self.run() # 如果是类方法,就无法访问self中的成员变量了 #print(self.value) print("成员方法do被调用") def do1(self): print(self.value) print(self.name) print(self) MyClass.run() #调用静态方法 print('----------------') c = MyClass() #调用构造方法 print('----------------') MyClass.do() #c.do() 调用类方法 print('----------------') c.do1() #调用成员方法
#可无限次迭代直角三角形的行的迭代器 class RightTriangle: def __init__(self): self.n=1 #定义一个变量n,表示当前的行数 def __next__(self):#通过字符串的乘法获取每一行的字符串 result='*' * (2*self.n - 1) self.n += 1 return result def __iter__(self): return self #该方法必须返回一个迭代器 rt=RightTriangle() for i in rt : #对迭代器进行迭代 if len(i) > 20: #控制输出的范围,否则会无限迭代 break; print(i)
# 递归生成器 def enumList(nestedList): try: for subList in nestedList: for element in enumList(subList): yield element except TypeError: yield nestedList nestedList = [4,[1,2,[3,5,6]],[4,3,[1,2,[4,5]],2],[1,2,4,5,7]] for num in enumList(nestedList): print(num, end=' ')