计算机组成
CPU:处理指令和运算数据
内存:临时存储CPU要处理的数据
硬盘:永久存储数据
常识:网卡之后常常重启。因为网卡是因为CPU不断的从硬盘调用数据,导致内存变满。重启会清空内存。
Python基础
内置对象
对象是python语言中最基本的概念,在python中处理的一切都是对象。
python中有许多内置对象可供编程者使用,内置对象可直接使用,如数字、字符串、列表、del等。
非内置对象需要导入模块才能使用,如正弦函数sin(x),随机数产生函数random( )等。
内置函数(BIF,built-in functions)是Python内置对象类型之一,不需要额外导入任何模块即可直接使用,这些内置对象都封装在内置模块__builtins__之中,用C语言实现并且进行了大量优化,具有非常快的运行速度,推荐优先使用。使用内置函数dir()可以查看所有内置函数和内置对象:
>>> dir(__builtins__)
使用help(函数名)可以查看某个函数的用法。
Python作用
Google开源机器学习框架:TensorFlow
开源社区主推学习框架:Scikit-learn
百度开源深度学习框架:Paddle
Python是一门跨平台、开源、免费的解释型高级动态编程语言。
Python支持命令式编程(How to do)、函数式编程(What to do),完全支持面向对象程序设计,拥有大量扩展库。
胶水语言:可以把多种不同语言编写的程序融合到一起实现无缝拼接,更好地发挥不同语言和工具的优势,满足不同应用领域的需求。
扩展库
pip在线安装(命令提示符环境,建议切换至Python安装目录中的scripts文件夹执行)
pip离线安装:https://www.lfd.uci.edu/~gohlke/pythonlibs/
exe安装,不是每个扩展库都支持
conda在线安装
如果机器上安装了多个Python开发环境,那么在一个环境下安装的扩展库无法在另一个环境下使用,需要分别安装
Python默认安装仅包含基本或核心模块,启动时也仅加载了基本模块,在需要时再显式地导入和加载标准库和第三方扩展库(需正确安装),这样可以减小程序运行的压力,并且具有很强的可扩展性。
从“木桶原理”的角度来看,这样的设计与安全配置时遵循的“最小权限”原则的思想是一致的,也有助于提高系统安全性。
_name_属性
通过Python程序的__name__属性可以识别程序的使用方式:
如果作为模块被导入,则其__name__属性的值被自动设置为模块名;
如果作为程序直接运行,则其__name__属性值被自动设置为字符串”main”。
解释器和Pycharm
Python解释器作用:运行文件
(1)种类:
CPython:C语言开发的解释器(官方),应用广泛的解释器。
IPython:基于CPython的一种交互式解释器。
PyPy:基于Python语⾔开发的解释器。
Jython:运⾏在Java平台的解释器,直接把Python代码编译成Java字节码执⾏。
IronPython:运⾏在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。
(2)Python环境下载
C:\$ cd Desktop\python_work
C:\Desktop\python_work$ dir
hello_world.py
C:\Desktop\python_work$ C:\Python35\python hello_world.py
Hello Python world!
(3)Pycharm相关知识
PyCharm是⼀种Python IDE(集成开发环境),带有⼀整套可以帮助⽤户在使⽤Python语⾔开发时提⾼其效率的⼯具,内部集成的功能如下:Project管理+智能提示+语法⾼亮+代码跳转+调试代码+解释代码+框架和库
(4)Pycharm的基本使用
项⽬根⽬录或根⽬录内部任意位置—右键-- [New] – [Python File]–输⼊⽂件名-- [OK]。如果是将来要上传到服务器的⽂件,那么⽂件名切记不能⽤中⽂。
修改解释器:
(5)Linux中搭建python环境:
Python 之禅:在 Python 终端会话中执行命令 import this,并粗略地浏览一下其他的指导原则。
注释
注释分为两类:单⾏注释和多⾏注释。(ctrl+/)
单⾏注释:只能注释⼀⾏内容,
#语句内容
print("hello Python") #输出(简单的说明可以放到⼀⾏代码的后⾯,⼀般习惯代码后⾯添加两个空格再书写注释⽂字)
多⾏注释:可以注释多⾏内容,⼀般⽤在注释⼀段代码的情况。
"""
第⼀⾏注释
第⼆⾏注释
第三⾏注释
"""
'''
注释1
注释2
注释3
'''
(1)python程序是依靠代码块的缩进来体现代码之间的逻辑关系的,缩进结束就表示一个代码块结束了。
(2)同一个级别的代码块的缩进量必须相同。
(3)一般而言,以4个空格为基本缩进单位。
(4)尽量不要写过长的语句。如果语句过长,可以考虑拆分成多个短一些的语句,以保证代码具有较好的可读性。如果语句确实太长而超过屏幕宽度,最好使用续行符(line continuation character)“\”,或者使用圆括号将多行代码括起来表示是一条语句。
变量
程序中,数据都是临时存储在内存中,为了更快速的查找或使⽤这个数据,通常我们把这个数据在内存中存储之后定义⼀个名称,这个名称就是变量。
定义变量:变量名=值
Python中的变量并不直接存储值,而是存储了值的内存地址或者引用,这也是变量类型随时可以改变的原因。
Python属于强类型编程语言,Python解释器会根据赋值或运算来自动推断变量类型。
(1)Python支持任意大的数字,具体可以大到什么程度仅受内存大小的限制。
(2)由于精度的问题,对于实数运算可能会有一定的误差,应尽量避免在实数之间直接进行相等性测试,而是应该以二者之差的绝对值是否足够小作为两个实数是否相等的依据。
(3)在数字的算术运算表达式求值时会进行隐式的类型转换,如果存在复数则都变成复数,如果没有复数但是有实数就都变成实数,如果都是整数则不进行类型转换。
(4)Python 3.6.x支持在数字中间位置使用单个下划线作为分隔来提高数字的可读性,类似于数学上使用逗号作为千位分隔符。
(5)在Python数字中单个下划线可以出现在中间任意位置,但不能出现开头和结尾位置,也不能使用多个连续的下划线。
标识符
由数字、字⺟、下划线组成
不能数字开头,可以字母和下划线打头
不能使⽤内置关键字,不能包括空格
严格区分⼤⼩写
在Python开发环境中导入模块keyword之后,可以使用print(keyword.kwlist)查看所有关键字。
Debug
bug是指程序中的错误。我们可以通过打断点和Debug尝试来查bug.
Debugger:显示变量和变量的细节
Console:输出内容
数据类型
检测数据类型的方法:type()
a = 1
print(type(a))# <class 'int'> --整型
b = 1.1
print(type(b))# <class 'float'> --浮点型
c = True
print(type(c))# <class 'bool'> --布尔型
d = '12345'
print(type(d))# <class 'str'> --字符串
e = [10, 20, 30]
print(type(e))# <class 'list'> --列表
f = (10, 20, 30)
print(type(f))# <class 'tuple'> --元组
h = {10, 20, 30}
print(type(h))
# <class 'set'> --集合
g = {'name':'TOM', 'age':20}
print(type(g))# <class 'dict'> --字典
转换数据类型的函数:
# 1. float() --转换成浮点型
num1 = 1
print(float(num1))
print(type(float(num1)))
# 2. str() --转换成字符串类型
num2 = 10
print(type(str(num2)))
# 3. tuple() --将⼀个序列转换成元组
list1 = [10, 20, 30]
print(tuple(list1))
print(type(tuple(list1)))
# 4. list() --将⼀个序列转换成列表
t1 = (100, 200, 300)
print(list(t1))
print(type(list(t1)))
# 5. eval() --将字符串中的数据转换成Python表达式原本类型
str1 = '10'
str2 = '[1, 2, 3]'
str3 = '(1000, 2000, 3000)'
print(type(eval(str1)))
print(type(eval(str2)))
print(type(eval(str3)))
运算符
算术运算符:
赋值运算符
比较运算符
逻辑运算符
a = 0
b = 1
c = 2
# and运算符,只要有⼀个值为0,则结果为0,否则结果为最后⼀个⾮0数字
print(a and b)# 0
print(b and a) # 0
print(a and c) # 0
print(c and a)# 0
print(b and c)# 2
print(c and b) # 1
# or运算符,只有所有值为0结果才为0,否则结果为第⼀个非0数字
print(a or b)# 1
print(a or c)# 2
print(b or c)# 1
(1)Python不支持++和–运算符,虽然在形式上有时候似乎可以这样用,但实际上是另外的含义,要注意和其他语言的区别。
程序控制语句
input()和print()是Python的基本输入输出函数,前者用来接收用户的键盘输入,后者用来把数据以指定的格式输出到标准控制台或指定的文件对象。不论用户输入什么内容,input()一律返回字符串对待,必要的时候可以使用内置函数int()、float()或eval()对用户输入的内容进行类型转换。
输出
格式化输出:
#我的名字是TOM
print('我的名字是%s'%name)
#我的学号是0001
print('我的学号是%4d'%student_id)
#我的体重是75.50公⽄
print('我的体重是%.2f公⽄'%weight)
#我的名字是TOM,今年18岁了
print('我的名字是%s,今年%d岁了'% (name, age))
print('我的名字是%s,今年%s岁了'% (name, age))
#%s也可以用于输出整型,浮点型
#我的名字是TOM,明年19岁了
print('我的名字是%s,明年%d岁了'% (name, age+1))
#我的名字是TOM,明年19岁了
print(f'我的名字是{name},明年{age + 1}岁了')
# f'{表达式}是python3.6之后新增的格式化方法
转义字符
\n:换⾏。
\t:制表符,⼀个tab键(4个空格)的距离。
print('输出的内容',end="\n")
# 俩个print换行输出
在Python中,print(),默认⾃带end="\n”这个换⾏结束符,所以导致每两个print直接会换⾏展示,⽤户可以按需求更改结束符。
输入
程序接收⽤户输⼊的数据的功能即是输⼊。
input("提示信息")
当程序执⾏到input时,等待⽤户输⼊,输⼊完成之后才继续向下执⾏。
在Python中,input接收⽤户输⼊后,⼀般存储到变量,⽅便使⽤。
在Python中,input会把接收到的任意⽤户输⼊的数据都当做字符串处理。
password=input('请输入密码:')
print(f'您输入的密码是{password}');
if语句
if true:#多个条件使用and连接
#or中只要最少有一个条件满足就可以通过测试
print("执行语句1");
print("执行语句2");
#下⽅的代码没有缩进到if语句块,所以和if条件⽆关
print('我是⽆论条件是否成⽴都要执⾏的代码')
需求1:⽤户可以输出⾃⼰的年龄,然后系统进⾏判断是否成年,成年则输出"您的年龄是’⽤户输⼊的年龄’,已经成年,可以上⽹"。
age = int(input('请输⼊您的年龄:'))
if age>= 18:
print(f'您的年龄是{age},已经成年,可以上⽹')
print('系统关闭')
if 条件:
条件成⽴执⾏的代码1
条件成⽴执⾏的代码2
else:
条件不成⽴执⾏的代码1
条件不成⽴执⾏的代码2
多重判断
if 条件1:
条件1成⽴执⾏的代码1
条件1成⽴执⾏的代码2
elif条件2:
条件2成⽴执⾏的代码1
条件2成⽴执⾏的代码2
else:
以上条件都不成⽴执⾏执⾏的代码
需求2:
1.如果有钱,则可以上⻋
2.上⻋后,如果有空座,可以坐下上⻋后,如果没有空座,则站着等空座位如果没钱,不能上⻋
money = 1
seat = 0
if money == 1:
print('⼟豪,不差钱,顺利上⻋')
if seat == 1:
print('有空座,可以坐下')
else:
print('没有空座,站等')
else:
print('没钱,不能上⻋,追着公交⻋跑')
三目运算符:
条件成⽴执⾏的表达式 if 条件 else 条件不成⽴执⾏的表达式
需求3:石头剪刀布游戏
import random
computer=random.randint(0,2)
print(computer)
player=int(input('您输入的是0石头1剪刀2布'))
if ((player == 0) and (computer == 1)) or ((player == 1) and (computer == 2) )or((player == 2) and (computer == 0)):
print('玩家获胜')
elif player == computer:
print('平局')
else:
print('电脑获胜')
循环
while 条件:
条件成⽴重复执⾏的代码1
条件成⽴重复执⾏的代码2
需求1:计算1-100的累加和
i=1
result=0
while i<=100:
result+=i
i+=1
print(result)
需求2:计算1-100的偶数之和
i=0
result=0
while i<100:
i+=2
result+=i
print(result)
需求3:打印星号(上三角)
j=0
while j<=4:
i=0
while i<=j
print('*')
i+=1
print()
j+=1
需求4:九九乘法表
i=1
while i<=9:
j=1
while j<=i:
print(f'{i}*{j}={i*j}',end='\t')
j+=1
print()
i+=1
while 条件:
条件成⽴重复执⾏的代码
else:
循环正常结束之后要执⾏的代码
i = 1
while i<= 5:
if i == 3:
print('这遍说的不真诚')
break
print('媳妇⼉,我错了')
i += 1
else:
print('媳妇原谅我了,真开⼼,哈哈哈哈')
所谓else指的是循环正常结束之后要执⾏的代码,即如果是break终⽌循环的情况,else下⽅缩进的代码将不执⾏。
i = 1
while i<= 5:
if i == 3:
print('这遍说的不真诚')
continue
print('媳妇⼉,我错了')
i += 1
else:
print('媳妇原谅我了,真开⼼,哈哈哈哈')
因为continu是退出当前⼀次循环,继续下⼀次循环,所以该循环在continue控制下是可以正常结束的,当循环结束后,则执⾏else
缩进的代码。
for 临时变量 in 序列:
重复执⾏的代码1
重复执⾏的代码2
for 临时变量 in 序列:
重复执⾏的代码
else:
循环正常结束之后要执⾏的代码
字符串
(1)在Python中,没有字符常量和变量的概念,只有字符串类型的常量和变量,单个字符也是字符串。使用单引号、双引号、三单引号、三双引号作为定界符(delimiter)来表示字符串,并且不同的定界符之间可以互相嵌套。
(2)Python 3.x全面支持中文,中文和英文字母都作为一个字符对待,甚至可以使用中文作为变量名。
除了支持使用加号运算符连接字符串以外,Python字符串还提供了大量的方法支持格式化、查找、替换、排版等操作。
- 特征:
name1 = 'Tom'
name2 = "Rose"
name3='''i am 1'''
# 三引号形式的字符串⽀持换⾏。
# 创建字符串I'm Tom?
c = "I'm Tom"
d = 'I\'m Tom'
- 输入和输出
name = 'Tom'
print('我的名字是%s'%name)
print(f'我的名字是{name}')
password = input('请输⼊您的密码:')
print(f'您输⼊的密码是{password}')
- 切片
切⽚是指对操作的对象截取其中⼀部分的操作。如果要提取从第3个元素到列表末尾的所有元素,可将起始索引指定为2,并省略终止索引。
序列[开始位置下标:结束位置下标:步⻓]
1.不包含结束位置下标对应的数据,
正负整数均可;(左闭右开)
2.步⻓是选取间隔,
正负整数均可,默认步⻓为1
name = "abcdefg"
print(name[2:5:1])# cde
print(name[2:5])# cde
print(name[:5])# abcde
print(name[1:])# bcdefg
print(name[:])# abcdefg
print(name[::2])# aceg
print(name[:-1])# abcdef,负1表示倒数第⼀个数据
print(name[-4:-1])# def(-1表示最后一个数据,依次向前类推)
print(name[::-1])# gfedcba 步长为负数,表示倒序选择
print(name[-4:-1:-1])# 不能选出数据,-1到-4表示从左向右,但-1步长表示从右往左选取
- 查找
字符串查找⽅法即是查找⼦串在字符串中的位置或出现的次数。
(1)find():检测某个⼦串是否包含在这个字符串中,如果在返回这个⼦串开始的位置下标,否则则返回-1。
字符串序列.find(⼦串,开始位置下标,结束位置下标)
mystr = "hello world and itcast and itheima and Python"
print(mystr.find('and'))
# 12
print(mystr.find('and', 15, 30))
# 23
print(mystr.find('ands'))
# -1
(2)index():检测某个⼦串是否包含在这个字符串中,如果在返回这个⼦串开始的位置下标,否则报异常
(3)rfind():和find()功能相同,但查找⽅向为右侧开始。
rindex():和index()功能相同,但查找⽅向为右侧开始。
count():返回某个⼦串在字符串中出现的次数
- 修改
所谓修改字符串,指的就是通过函数的形式修改字符串中的数据。replace()有返回值,是修改后的字符串,但是不会修改原有的字符串。原有的字符串并未进行修改,修改的是返回值。说明字符串是不可变的数据类型。
如果分割字符是原有字符串的子串,分割后会丢失该子串。
转换大小写的方法:
title():将每句中每个单词的首字母转换为大写
capitalize():将字符串的第一个字符转换为大写
lower():将字符串中的大写转换为小写
upper():将字符串中的小写转换为大写
字符串相关的空白内容:
在编程中,空白泛指任何非打印字符,如空格、制表符和换行符。你可使用空白来组织输出,以使其更易读。
(1)lstrip():删除字符串左侧空白
(2)rstrip():删除字符串右侧空白
(3)strip():删除字符串俩测空白
(4)ljust():返回一个原字符串,左对齐,并且使用默认字符填充到指定长度
6. 判断
所谓判断即是判断真假,返回的结果是布尔型数据类型:True或False。
易错点:
message="hello"+str(age)+"rd Birthday"
age=input("How old are you?") '21'
age=int(age) 21
Python 2.7,应使用函数raw_input()来提示用户输入。这个函数和Python 3中的input()一样,也将输入解读为字符串。Python 2.7也包含函数input(),但它将用户输入解读为Python代码,并尝试运行它们。因此,最好的结果是出现错误,指出Python不明白输入的代码;而最糟的结果是,将运行你原本无意运行的代码。