输入输出语句
输入语句
>>>name=input('Please input name')
>>>#这里就是等待你输入,注意,input输入的结果是String类型
>>>name
>>>#你输入的结果将在这里显示
输出语句
>>>#直接输出变量
>>>print("")#可以输出变量或者字符
数据类型和变量
数据类型
- 整数
- 浮点数
- 字符串
- 转义字符:\
- 换行:\n 制表符:\t 斜杠:\
- print(r’\\t\’) 当print在”号前面加上r以后,这个表示会全部输出”的内容
- 布尔类型
- 空值:None
变量
- python会自动匹配变量类型,称为动态变量
编码
编写文件的时候不能用window自带的文本编辑器编写,因为window会自动给你加一段空值,目的是变为utf-8编码,实际上这样编写代码会出问题
在编写py文件的时候,需要加上这两句话
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
下面为编码的转换方式
//转换为ascii编码 (order序列化了)
ord()
//把ascii编码转换为字符
chr()
//str转换为指定编码
str.encode('utf-8')
//把指定编码转换为str
str.decode('utf-8')
判断语句和循环语句
if语句
//特别注意条件后面的:号,还有缩进,在python中缩进代表的控制域
if a>0:
print('a>0')
elif a=0:
print('a=0')
else:
print('a<0')
循环语句
//第一种类似java中的foreach,names是个集合
for name in names:
print(name)
//while语句
n=10
while n>0:
print(n)
n=n-1
//break语句可以推出循环
//continue语句可以跳过当前循环
集合、字典
集合
List集合(Java中数组和List的结合体)
>>>list=none#定义了一个空变量
>>>list=[]#变量自动匹配为list
>>>list=['a','b','c']
//下面为list集合的各种方法
>>>list[0]#按照下标读取集合
>>>list[0]='A'#按照下标更新集合
>>>list.append('d')#添加集合,等同于java中list.add()
>>>list.pop(3)#删除集合下标为3的,下标从0开始(0,1,2,3)
>>>list.insert(3,'D')#在集合指定位置插入值
>>>list.sort()#集合元素排序
//二维集合(类似java二维数组)
>>>list['a',['b','c'],'d','e']
>>>list[1][0]
>>>b#这里是python的输出结果
>>>#注意list在传递和赋值的时候会把地址也传递过去
元组
>>>tuple=('a',b,c)
//元组在定义的时候必须初始化,而且是常量不可变
//但是
>>>tuple=('a',['b','c'],'d')
>>>这种嵌套list的元组,可以改变list的值,因为相对于元组来说,list的地址是不变的,变得是list里面内容的地址
set集合
>>>set=() #定义了一个Set集合
>>>set=(['a','b','c'])#set集合是无序的无重复的
>>>set.add('d')#添加方法
>>>set.remove(3)#删除下标3的元素,下标从0开始(0,1,2,3)
//假设s1和s2是两个集合
>>>s1&s2 #结果为s1和s2的交集
>>>s1|s2 #结果为s1和s2的并集
dict字典
dict字典其实就是java中的map
>>>dict={}#定义了一个字典
>>>dict={'a':'A','b':'B'}
>>>'key' in dict#判断key这个是否存在dict的key中,返回true|False
>>>dict.get('key')#判断key是否在dict中,返回None,但是在交互模式不会显示None
>>>dict.get('key',-1)#同上,不存在返回-1
>>>dict.pop('key')#删除这个key的关系
>>>dict['c']='C'#添加一个字典
>>>d.values()#获取字典的values集合
>>>d,items#获取字典的key和values集合
调用函数
//转换为int类型
int()
//转换为float类型
float()
//转换为str类型
str()
//转换为布尔类型
bool()
//获得一个范围
range(0,100)//注意不包括100
//转换为list
list(range(0,100))//[0,1,2...,99]
//计算字符串长度
len(str)
//获取绝对值
abs(-20)
//获取最大值
max(1,2)
定义函数
def myfun(old):
if old>=18:
print('成年了!')
return True
else:
print('未成年!')
return False
#注意缩进,还有函数必须定义在调用的上面
函数的参数
#第一种
def power(x):
return x*x
//开始运行函数
>>>power(5)
>>>25
#第二种
def power(x,n=2):
s=1
while n>0:
n=n-1
s=s*x
return s
//我们在这里定义了一个n=2,意思就是一个默认参数
//开始调用
>>>power(5)
>>>25#默认参数为2,算得是5的2次方
>>>power(5,3)
>>>125 #默认参数改为了3,算得是5的3次方
>>>当定义了多个默认参数,调用可以选择某个默认参数
>>>power(5,n=4)
#第三种(可变参数,在函数内部是一个tuple)
def calc(*numbers):
sum=0
for n in numbers:
sum=sum+n
return sum
//调用
>>>calc(1,2,3)
>>>6
//如果要传入一个list,可以把参数变为一个变量list,或者把list变为可变参数
>>>list=[1,2,3]
>>>calc(*list)
>>>6
#第四种(关键字参数)
def person(name,age,**kw):
print('name:',name,'age:',age,'kw:',kw)
>>>person('yh',23,city='BeiJing')
>>>name:yh age:23 kw:{'city':'BeiJing'}#输出结果
//把一个dict当关键字参数传入
>>>value={'city':'BeiJing','job':'IT'}
>>>person('yh',23,**value)
>>>name:yh age:23 kw:{'city':'BeiJing','job':'IT'}#输出结果
//限制关键字的key
def person(name,age,*,city,job):#这样定义就限制只能输入city和job的关键词
print('name:',name,'age:',age,'kw:',kw)
#第五种(可变参数和关键词参数联合使用)
def person(name,age,*number,city,age):#一起使用就把*省略
print('name:',name,'age:',age,'kw:',kw)
#如果命名关键词也有默认值,在调用的时候可以省略
递归函数
#计算n!,你的阶乘
def fact(n):
if n==1:
return 1
return n*fact(n-1)
#但是上面的算法会栈溢出
#所以有了尾递归的方法,return的时候不进行计算
def fact(n,sum=1):
if n==1
return sum
return fact(n-1,n*sum)
高级特性
切片
>>>L=[1,2,3,4,5,6]
>>>#切片的意思就是截取,在java中非常麻烦,得使用substring,但是在py中非常简单
>>>L[0:3]#从截取到3,但是不包括3
>>>[1,2,3]#别忘记在Py中可以逆向的数-1
迭代
上面都学了循环,我们知道迭代可以使用for in:
判断是否可以循环,我们需要导入模块
>>>from collections import Iterable
>>>isinstance('abc',Iterable)
>>>true
要是想用下标循环如下
>>> for i,value in enumerate(['a','b','c']):
>>> print(i,value)
>>>0 a
>>>1 b
>>>2 c
用两个参数进行迭代
>>>for x,y in [(0,1),(2,3)]:
>>> print(x,y)
>>>0 1
>>>2 3
列表生成器
//格式(计算0,1,2,3,4的平方大于10的输出)
>>>L=[x*x for x in list(range(0.5)) if x*x>10]
>>>L
>>>16
生成器
//把列表生成器的[]改为()
>>>L=(x*x for x in list(range(0.6)) if x*x>10)
>>>L
<generator object <genexpr> at 0x1022ef630>
//可见没有输出结果,而是输出了地址
>>>next(L)
>>>16
>>>next(L)
>>>25
//可见生成器使用next来一步一步前进的
//大家也可以用for in循环L
//函数中调用yield,这个函数就变为一个生成器
迭代器
判断是否是迭代器
>>>from collections import Iterator
>>>isinstance(L,Iterator)
>>>True
//注意list,dict,str是Iterable,而不是Iterator
//iter()函数可以把它们变为Iterator