python零基础入门到入土1.0
python系列第一章
1. python简介
Python是一种面向对象、解释型、弱类型的脚本语言,它也是一种功能强大而完善的通用型语言。
相比其他编程语言(比如Java ) ,Python代码非常简单,上手非常容易。比如我们要完成某个功能,如果用Java需要100行代码,但用Python可能只需要20行代码,这是 Python具有巨大吸引力的一大特点。
Python的两大特色是清晰的语法和可扩展性︰
- Python 的语法非常清晰,它甚至不是一种格式自由的语言。例如,它要求if语句的下一行必须向右缩进,否则不能通过编译。
- Python的可扩展性体现为它的模块,Python具有脚本语言中最丰富和强大的类库(这些类库被形象地称 为“batteries
included,内置电池”),这些类库覆盖了文件I/O、GUI、网络编程、数据库访问、文本操作等绝大部分应用场景。
此外,Python的社区也很发达,即使一些小众的应用场景,Python往往也有对应的开源模块来提供解决方案。
Python作为一门解释型的语言,它天生具有跨平台的特征,只要为平台提供了相应的Python解释器,Python就可以在该平台上运行。
解释型语言几乎天然是跨平台的。
Python自然也具有解释型语言的一些弱点:
- .速度慢: Python程序比Java、C、C++等程序的运行效率都要慢。
- 源代码加密困难∶不像编译型语言的源程序会被编译成目标程序,Python直接运行源程序,因此对源代码加密比较困难。
安装python3.7:
- python解释器
- pip包管理器,管理的是扩展的一些库文件。(放在Lib/site-packages)
- python的标准库:Lib
什么是 pip ?
pip 是 Python 中的标准库管理器。它允许你安装和管理不属于 Python标准库 的其它软件包。
Python 的安装器中自带了 pip,所以你可以直接使用它,除非你安装的是更早版本的 Python。可以通过在控制台中运行以下命令来验证 pip 是否可用:
2. pycharm 常用快捷键
Shift +enter 添加一行
Ctrl +/ 行注释
Ctrl + Shift+/ 块注释
Tab / Shift + Tab 缩进、不缩进当前行Ctrl +D复制选定的区域或行
‘Ctrl + Home 第一行
Ctrl+End最后—行
Ctrl+g 弹出一个框,输入要跳的行数
最常用
三引号的作用:
1.保留格式的字符串使用
2.作为注释使用
3. 变量的命名
变量的定义:
对于重复使用,并且经常需要修改的数据,可以定义为变量,来提高编程效率。
定义变量的语法为:盘量名=变量值。(这里的=作用是赋值。)
定义变量后可以使用变量名来访问变量值。
变量:‘容器‘
弱语言:变量声明的时候对数据类型不是很严格。
比如:
java:int a=100
float b=9.9
python: a=100
格式:变量名=值
1.怎么起名?
2.可以赋什么值
3.有哪些数据类型
变量名的命名规范:
1.字母,数字,下划线,其他特殊符号不行
2.不能数字开头
3.不能使用关键字
4.区分大小写
变量命名法:
见名知义: getnamebyline(太难看)
常见命名法:
getNameByLine驼峰式:开头第一个单词全部小写
小驼峰:单词之间用 _ 隔开
大驼峰:python面向对象:类名每个单词的首字母大写
4. 数据类型
4.1 int 整型
顾名思义,就是数字类型是整数的一种变量。
age = 18
name_of_oldboy = 32
可用于数学运算和比较运算
4.2 float(浮点型)
带小数点的数字变量。
height = 180.1
weight = 74.8
这种用到小数的数字类型变量,都是属于float
可用于数学运算和比较运算
注:int和float都属于数字类型。
4.3 str(字符串)
用于表示事物一种属性、特征、状态的变量类型
name = "sgt"job = “teacher” hobbies = “fitness”
在单引号(‘ ’)、双引号(“ ”)、三引号(“‘ ’”)内包含一系列字符,来表示字符串类型
字符串可以被拼接,用+和*
比如
name1 = 'Mr'
name2 = 'Su'
print(name1 + name2)
结果是:MrSu
name = 'haha'
print(name*5)
结果是:hahahahahahahahahaha
字符串的拼接由于效率太低,所以不推荐使用
4.4 bool(布尔类型)
用于判断
True
False
print(1>2)
>>>False
print(1==1)
>>>True
强调:所有值都自带布尔值,除了0、None、空布尔值是False以外,其他都是True。
空布尔值:空列表[ ]
4.5 type(参数) 判断数据是什么类型
int,float -> number 数字类型
str -> string 字符串类型
true和false -> bool 布尔类型
a = 100
print(type(a))
输出number
4.6 list(列表)
按照位置记录多个值,索引对应值,索引从0开始,可以去除对应索引位置的值,可以理解成数组
索引位置:0 1 2 3
list1 = [200, 180.1, 'sgt', [18, 'oldboy', 'wuhan', ]]
嵌套内列表索引位置 0 1 2
取出对应值得方法:
print(list1[3][2])
>>>>wuhan
列表内的多个值可以使任何类型的变量,也可以嵌套列表。
4.7 dict(字典)
记录多个不同属性的值,就是对象
在{ }内用逗号分开每个元素,每个元素用key:value组成。
value就是所存值,可以使任意类型。
一个key唯一对应一个value,key应该对value具有描述功能,所以key通常是字符串类型。
info = {'name':'sgt', 'age':32, 'hobby':['fitness', 'reading book']}
print(info['name'])
print(info['hobby'][1])
>>>>>结果是sgtreading book
4.8 tuple( 元组)
元组(tuple)是 Python 中另一个重要的序列结构,和列表类似,元组也是由一系列按特定顺序排序的元素组成。
元组使用小括号,列表使用方括号。
元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。
在Python中,也可以创建空元组,空元组可以应用在为函数传递一个空值或者返回空值
一、创建数值元组
在Python中,可以使用tuple()函数直接将range()函数循环出来的结果转换为数值元组。
语法格式如下: tuple(data)
data = range(1, 11)
tupleName = tuple(data)
print(tupleName)
#(1,2,3,4,5,6,7,8,9,10)
二、删除元组
元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组。
对于已经创建的元组,不再使用时,可以使用del语句将其删除。
示例:del删除元组
tup = ('physics', 'chemistry', 1997, 2000)
print tup
del tup
print "After deleting tup : "
print tup
以上实例元组被删除后,输出变量会有异常信息,输出如下所示:
('physics', 'chemistry', 1997, 2000)
After deleting tup :
Traceback (most recent call last):
File "test.py", line 9, in <module>
print tup
NameError: name 'tup' is not defined
三、修改元组
元组是不可变序列,所以不能对它的单个元素值进行修改。
但是元组也不是完全不能修改,可以对元组进行重新赋值。
data = range(1, 11)
tupleName = tuple(data)
tupleName = (5, 4, 3, 2, 1)
print(tupleName)
#(5, 4, 3, 2, 1)
四、元组内置函数
五、元组与列表的区别
六、元组与列表的相互转换
4.9 set( 集合 )
集合(set)是一个无序的不重复元素序列。
定义集合: a={1, 1, 1, 1, 1, 1, 3, 4, 2},创造空集合:b = set()
构造集合
可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
1、使用大括号{}
basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
print(basket) # {'apple', 'orange', 'banana', 'pear'}
当使用print()函数打印输出时,会自动将集合中重复的元素去除,且每次打印返回的顺序并不和初始的一致。
2、使用set()函数
fruit = set(("apple", "banana", "cherry")) # 请留意这个双括号
print(fruit) # {'banana', 'apple', 'cherry'}
在使用set()函数创建集合时,一定要注意双括号。
5. 类型转换
str( ):可以把其他类型数据转化为字符串类型
int( ):可以把其他类型数据转化为整型
float( ):可以把其他类型数据转化为浮点型
bool( ):可以把其他类型数据转化为布尔类型
list( ):可以把其他类型数据转化为列表类型
tuple( ):可以把其他类型数据转化为元组类型
dict( ):可以把其他类型数据转化为字典类型
set( ):可以把其他类型数据转化为集合类型
比如:
'''
以变量名:a
str ---> intint(a)但是如果'9.9'而且是字符串类型转成int的时候报错了
str ---> floatfloat(a)
int ----> strstr(a)
float ----> strstr(a)
int ---> floatfloat(a)
float ---> intint(a)只不过float类型中小数点后面的数字被抹掉了
'''
6. 用户交互
6.1 接收用户输入
name = input('please input your name:')
print(name)
6.2 格式化输入 input
name = input('please input your name:')
age = input('please input your age:')
introduction = "My name is %s , I'm %s years old ." %(name, age)
print(introduction)
占位符:%s,%d,
这里的%s可以是任意类型,
还有一种%d只能是数字类型,不常用。
name = input('请输入您的姓名:')
age = input('请输入您的年龄:')
job = input('请输入您的工作:')
sex = input('请输入您的性别:')
print('''
---------------info %s---------------
Name : %s
Age : %s
Sex : %s
Job : %s
---------------end---------------''' % (name, name, age, job, sex))
强调:在Python3.6中,会把输入的值默认当成字符串类型来存入,所以输入的数值都是字符串类型。
6.3 格式化输出 print的使用
python中print表示的就是输出的意思。在输出想要输出的内容时,需要添加""或者’'。
python的print功能非常强大,还有计算的功能,如果在print中计算,它会直接输出答案。
需要注意的是数字是不能和字符串直接相加的,否则会出现错误。其实也很好理解,就是两者不是同一个类型。
案例:
%()用来填充选择设置的变量
name = 'van'
age = 33
print('我知道%d岁的%s!!'%(age,name))
>>>>>
>#我知道33岁的van!!
一、print 的 end
python里的end是print函数中的参数,为末尾end传递一个字符串,这样print函数不会在字符串末尾添加一个换行符,而是添加一个字符串,其实这也是一个语法要求,表示这个语句没结束。
print('AAA',end='')
print('BBB',end='')
print('CCC',end='')
#>>>>
#AAABBBCCC
end意思就是以给定字符串或制表符结尾,但是不默认换行。
二、print 的 format 方法
format是字符串内嵌的一个方法,用于格式化字符串。以大括号{}来标明被替换的字符串。
基本用法
1. 按照{}的顺序依次匹配括号中的值
print("我叫{},今年{}岁。".format("van",18))
#我叫van,今年18岁。
#花括号的个数决定了,参数的个数。但是花括号的个数可以少于参数。
print("我喜欢{}和{}"format("乒乓球","羽毛球","敲代码"))
#我喜欢乒乓球和羽毛球。
"""
花括号多于参数的个数,则会报错。
"""
2. 通过索引的方式去匹配参数
s = "{0} is a {1}".format('Tom', 'Boy')
print(s) # Tom is a Boy
s1 = "{1} is a {2}".format('Tom', 'Lily', 'Girl')
print(s1) # Lily is a Girl
字符串中索引的顺序可以打乱,并不影响匹配。
s = "{1} is a {0}".format('Boy', 'Tom', )
print(s) # Tom is a Boy
3. 通过参数名来匹配参数
s = "{name} is a {sex}".format(name='Tom', sex='Boy')
print(s) # Tom is a Boy
同理,如果参数已经确定,可以直接利用{}进行格式化引用。
name = 'Tom'
sex = 'Girl'
# 以f开头表示在字符串中支持大括号内的python表达式 此用法3.6之后支持
s = f"{name} is a {sex}"
print(s) # Tom is a Boy
7. 转义字符
8. 常量
常量是不变的变量,例如常用的圆周率是常量,在Python中,常量通常用大写的变量名表示。但事实上,Python没有严格的常量。
常量通常放在代码的顶部,作为全局使用。
9. 运算符类型
9.1 算数运算符
+、-、* (乘)、/(除法)、%(取余数)、//(取整除)、** (幂)。
x = 1
y = 2
print(x+y)
print(y-x)
print(x*y)
print(y/x)
print(y%x)
print(y//x)
print(x**y)
结果
3
1
2
2.0
0
2
1
9.2 比较运算符
==、!=、<、>、<=、>=
print(10 == 10)
print(10 != 10)
print(10 > 3)
print(10 < 3)
print(10 >= 10)
print('sgt' == 'sgt')
>>>
True
False
True
False
True
True
10.赋值运算符
10.1 增量赋值
age = 18
age+=2 #结果是20
age-=2 #结果是16
age*=2 #结果是36
age/=2 #结果是9
age%=2 #结果是0
age//=2 #结果是9
age**=2 #结果是324
10.2 交叉赋值
x = 1
y = 2
x, y = y, x
print(x, y)
#结果是x=2 y=1
10.3 链式赋值
x = y = z =1
print(x, y, z)
#结果是1 1 1
10.4 解压赋值
info = ['a', 'b', 'c', 'd', 'e']
x, y, z, m, n = info
print(x, y, z, m, n)
#结果是a b c d e
这里的xyzmn必须与abcde是一一对应,不然会报错。
如果要取两边的多个数值,可以用*_解决
例如
info = ['a', 'b', 'c', 'd', 'e']
x, y, *_, n = info
print(x, y, n)
#结果是a b e
11.逻辑运算符
and、or、not
and:逻辑与,连接左右两边的运算结果都为Ture的时候,总结果才为Ture
print(3 > 4 and 3 == 3)
print('sgt' == 'sgt' and 1 == 1)
#结果是
False
True
or:逻辑或,连接左右两边的运算结果有一个为Ture的时候,总结果就可为Ture
print(3 > 4 or 3 == 3)
print('sgt' != 'sgt' or 1 >= 1)
#结果是
True
True
not:取反
print(not 10 > 3)
#结果是 False
12. 进制转换
输出前缀:0b 二进制 0o 八进制 0x十六进制 默认十进制
二进制:0,1
八进制:0,1,2,3,4,5,6,7
十进制:0-9
十六进制:0-9 a-f(10-15)
函数:
bin() 0b
int()
oct() 0o
hex() 0x
12.1 十进制转二进制 bin()
n = 149
result = bin(n)
print(result)
12.2 十进制转八进制 oct()
result = oct(n)
print(result)
12.3 十进制转十六进制 hex()
result = hex(n)
print(result)
输出结果:
0b10010101
0o225
0x95
案例:
1.n = 0x558,十进制输出
2.已知n = 0x558,转成二进制?转成八进制?
已知二进制转成十六进制,将二进制从右侧开始4位一组,最后不足4位补0
已知二进制转八进制,将二进制从右侧开始3位一组,最后一组不足3位补0
n = 0x558
result = int(n)
print(result)
result = bin(n) # 向二进制转换,无论现在是几进制的
print(result)
result = oct(n) # 向八进制转换,无论现在是几进制的
print(result)
输出结果:
1368
0b10101011000
0o2530
13. 位运算
python中位运算符主要包括&、|、^、~、<<、>>这6种,下面简单介绍下位运算符的应用。
13.1 & 与运算符
&:按位与运算符,参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0。例如3 & 2输出结果 2。
print(3&2)
#3 0000 0011
&
#2 0000 0010
#-------------
# 0000 0010
结果 为 2
13.2|或运算符
|:按位或运算符,只要对应的二个二进位有一个为1时,结果位就为1。例如5| 3 输出结果 7。
print(5|3)
#5 0000 0101
|
#3 0000 0011
#-------------
# 0000 0111
结果7
13.3 ^ 异或运算符
^:按位异或运算符,当两对应的二进位相异时,结果为1,相同时结果为0。例如3 ^5 输出结果 6。
print(3^5)
#3 0000 0011
^
#5 0000 0101
#-------------
# 0000 0110->6
结果6
13.4 ~ 取反运算符
按位取反运算符,对数据的每个二进制位取反,即把1变为0,把0变为1 。
例如 ~5 输出结果 -6。
print(~5)
#5 0000 0101
#看二进制第一位(第一位是符号位,只要第一位是1的就是负数,第一位是0的就是整数
#取反0和1 补码 1111 1010 已知符号为负
#然后补码-1 反码 1111 1001
#取反 得到数值 0000 0110
#-------------
所以结果为 -6
13.5 << 左移动运算符
<<:左移动运算符,运算数的各二进位全部左移若干位,由<< 右边的数字指定了移动的位数,高位丢弃,低位补0。
例如1 << 2 输出结果 4。
print(2<<1)
#2 0000 0010
#向左移动1位 0000 0100 -> 4
#-------------
结果4
所以
左移:m<<n 结果是m*2的n次方
13.6 右运算符 >>
右移动运算符,把运算数的各二进位全部右移若干位,>> 右边的数字指定了移动的位数。例如3 >> 4 输出结果0。
print(16>>2)
#16 0000 1000
#向由移动2位 0000 0010 -> 2
#-------------
结果2
所以
右移:m>>n 结果是m/2的n次方