内置对象概述:
就是不需要安装和导入任何模块就能用的,在python里一切都是对象
对象类型 | 类型名称 | 例子 | 说明 |
---|---|---|---|
数字 | int float complex | 1 0.1 1+2j | 支持复数,任意大的数字 |
字符串 | str | 'asx' r'c:\1.txt' | 用('',"")包含 用r或R表示原始字符串 |
列表 | list | [1,2,[4,6],'a'] | 任意类型元素 |
元组 | tuple | (1,2,[4,8]) (1,) | 一个元素时,要有逗号 |
字典 | dict | {1:2,2:'as'} | 键不重复,键不可变 |
集合 | set | {4,'a',5} | 元素不重复,不可变 |
布尔 | bool | True,False | 逻辑值 |
文件 | f=open('1.txt') | ||
编程单元 | 函数(def) 类(class) 模块(module) |
常量:值不能改变
像字符串,元组,数字都不能变
x=5
type(x)
#<class 'int'>
isinstance(x,int) #内置函数看看x是不是int类型
#True
变量类型可以改变的原因:
1是算出等号右边的结果,2是在内存里找个位置存进去,3是整个变量指向这个内存
又因为变量类型改变的是值的类型(当一个数字5改变成了字符'5',这个变量是不是就变成了char型)
abs(-1) #绝对值
字符串
python支持中文作为变量名
赵日天='我是天下第一'
赵日天
定界符(就是"",'',''' '''这些玩意)可以互相嵌套
x='我是一只'
y='阳光大Boy'
x+y #字符串连接
#'我是一只阳光大Boy'
z='S'
z*3 #重复
#SSS
小可爱:
x_set={1,2,'a'}
x_set[1] #这货不能用下标访问
#Traceback (most recent call last):
File "<pyshell#22>", line 1, in <module>
x_set[0]
TypeError: 'set' object is not subscriptable
2 in x_set #成员测试
#True
3/2 #1.5
3//2 #1
15//4.0 #3.0
-15//4.0 #-4,不是-3
# %可以求余,也可以字符串格式化
'%c %s %d %f' %(65,65,65,65)
#'A,65,65,65.000000'
3 and 5 #and和or连接的表达式的值不一定是True或False
#5
3 and 5>2 #把最后一个表达式的值作为结果
#True
#python不支持++和--
i=3
i++ #error
++i #3,意思是俩正号
查看所有内置函数或内置对象:dir(__builtins__)
help(函数名)看某个函数用法
#eval返回的是字符串里表达式的值,注意里面是字符串
eval('3+5') #8
eval('[1,2]') #[1,2]
eval('09') #error
int(09)#9
str([1,2]) #'[1,2]'
list(str([])) #['[','1',',','2',']']这个是真的狗
print()
print(1,3,sep='.')#sep是数据之间分隔符
for i in range(10):
print(i,end=',') #end默认是换行
枚举和迭代
#注意可迭代对象需要转换成其他类型就可以看到了
a=[1,2]
b=reversed(a) #[2,1]这是个可迭代对象
list(b) #[2,1]
#enumerate(),枚举可迭代对象的元素,返回的是可迭代对象,每个元素都是有俩值的元组
list(enumerate('12'))
#[(0,'1'),(1,'2')]
Map(),reduce(),filter(),lambda()
#map就是把原来的元素每一个都经过一个函数的处理,,然后返回可迭代map对象
def f(x):
return x+1
list(map(f,range(5)))
#[5,6,7,8,9,10]
#lambda是一个有函数功能的短句,lambda 表达式参数:表达式
a=lambda x:x+2
a(3) #5
#reduce他是将函数(这个函数有俩参数)以从左到右的方法遍历后面的序列,返回一个值
from functools import reduce
reduce(lambda x,y:x+y,range(4))
#6=((((0+1)+2)+3))
#filter就是把一个函数(一个参数)作用到一个序列上,返回的是序列里的元素(经过前面函数判断为真的元素)
s=['a','2','&']
b=filter(lambda x:x.isalnum(),s) #isalnum()判断是不是字符串
list(b)
#['a','2']
zip函数
#把几个可迭代对象里面对应位置的元素压缩,返回可迭代对象,得到的每个元素都是元组的形式
a=zip('abc',[1,2,3]) #显示<zip object at 0x000001A84D2998C0>这个东西,你阔以list一下
list(a)
#[('a',1),('b',2),('c',3)]
list(a) #注意,zip对象只能遍历一次,访问过就没了
#[]
#你可以在第一遍遍历时让b=list(a)
序列概述:就是一个装东西的容器,比数组强大.有俩分类方式
一:按有序和无序
- 有序( 列表,元组,字符串),能通过索引访问的就是有序的
- 无序(字典,集合)
二:按能不能变化
- 可变(列表,字典,集合)
- 不可变(元组,字符串)
列表
a={'a':1,'b':2}
b=list({'a':1,'b':2}.items())
#items是拿出来键还有值
#[('a',1),('b',2)]
列表推导式
#我感觉就是for循环,可以嵌套,也可以加if判断
a=[x+1 for x in range(10)]
#[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
#就是for x in range(10):
a.append(x+1)
切片
#注意step=-1时候
a=[1,2,3,4]
a[3:1:-1] #[4,3],这个开始竟然比结束大
元组,生成器表达式
#不可变,用切片时只能访问,不能修改
#生成器表达式就是把列表表达式的[]改成()
#像可迭代对象,不过这玩意只能遍历一次
a=(i+2 for i in range(10))
tuple(a) #(2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
tuple(a) #[]变成空的了
#map,enumerate,filter,map,zip都有这特点
集合:
#关系运算符(>,<)在集合里时包含,不是比大小
选择结构
if a=60: #error,条件表达式里不让赋值,因为容易和那个(等于)混淆
print(1)
#三元运算符,很像if..else
a=5
b = 6 if a>7 else 8 #8
#(要是a>7时真,就把6给b,否则就是8)
#elif 是 else if 的缩写
秒啊(选择结构)
score=int(input())
degree='DCBAAF' #
index=(score-60)//10 #正好让下标对应上面的字母
if index>=0:
print(degree[index])
else:
print(degree[-1]) #60分一下,对应的是F
#100之内最大素数
for n in range(1000,1,-1):
if n%2==0:
continue
for i in range(3,int(n**0.5)+1,2):
if n%i==0:
break
else:
print(n)
break #结束外循环
写个菱形
n=int(input())
for i in range(n):
print(('* '*i).center(n*3,' ')) #上半三角
#center是让字符串居中对齐,第一个参数是宽度
#第二个是替代空白的东西
for i in range(n,0,-1):
print(('* '*i).center(n*3,' '))
#呼呼,气煞老夫