第一部分 python基础部分

第一章 环境搭建


python是什么

Python是一种跨平台、开源、免费、的高级程序设计语言。

Python是面向对象、解释型、动态数据类型的高级程序设计语言。

Python是一种脚本语言

python特点

Python的设计哲学为:优雅、明确、简单 ,相比C或C++代码量大大减少,代码质量大大提高,“Life is short,you need Python” 即“人生苦短,我用Python”

Python是一种扩充强大的编程语言,拥有丰富和强大的库,Python能够把其它语言制作的各种模块轻松的链接在一起(尤其是C/C++),又称为“==胶水==”语言

其实⽬前很多知名的机器学习、⼈⼯智能以及深度学习框架也都是基于Python语⾔进⾏开发的:

Google开源机器学习框架:TensorFlow开源社区主推学习框架:Scikit-learn百度开源深度学习框架:Paddle

python的版本变迁

2020 年 1 月 1 日, 停止 Python 2 的更新,Python 2.7 被确定为最后一个 Python 2.x 版本

第一部分 python基础部分_第1张图片

版本对比:

第一部分 python基础部分_第2张图片

注意:

  • Python2.0对中文字符串支持性能不够好

  • Python2.0与3.0系列版本的开发思想相同,只有少量语法差别

  • 由于扩展库的发行总是滞后于python版本的发行,所以有些扩展库还不支持3.0系列版本(动态变化)

  • 版本选择应该以开发目的、使用到的扩展库、扩展库支持的最高版本为选择标准来选择python版本

  • Python2.0版本的代码不能直接在3.0的环境下运行,可以使用一些工具进行2.0代码与3.0代码转换,如:2to3.py等

  • 在生产环境中,⼀般不会选择最新版本,因为可能会存在未知Bug,所以⼀般强烈建议大家在选择软件版本时,向前推1 ~ 2个版本。所以咱们课程主要讲解Python3.10版本。

搭建python的环境

python解释器

  • 解释器下载网址:https://www.python.org/

第一部分 python基础部分_第3张图片
  • 选择安装包:Windows installer (64bit)

  • 安装解释器:

第一部分 python基础部分_第4张图片

选择Customize installation 自定义安装,建议不要选择上面的默认安装
Add Python3.8 to PATH一定要打勾,表示自动配置环境变量
第一部分 python基础部分_第5张图片
Documentation(安装帮助文档)
pip(安装下载python包的工具pip)
td/tk and IDLE(安装Tkinter和IDLE开发环境)
Python test suite (安装标准测试套件)
py launcher (启动器)
for all users (安装所有用户都可启动python的快捷方式)
  • 测设安装是否成功:打开运行输入CMD启动命令行输入python :

第一部分 python基础部分_第6张图片

pycharm集成开发环境

  • 下载:https://www.jetbrains.com/pycharm/download/#section=windows

第一部分 python基础部分_第7张图片
Professional(专业版本) : 功能更加强大,主要是为Python和web开发者而准备,是需要付费
community(社区版本) :轻量级,主要是为Python和数据专家而准备的
  • 新建项目:选择 Create New Project

第一部分 python基础部分_第8张图片

  • 新建项目设置

第一部分 python基础部分_第9张图片

Location:设置项目文件夹位置,可以实现新建一个目录,以pychon版本号命名,选择该目录即可
New environment using: 为项目创建一个新的环境,选择Virtualenv环境模式,Virtualenv用来创建一个虚拟pychon环境,解决了多个pychon程序共用一个解释器和插件的情况。
Location:设置虚拟环境目录,默认即可,该目录在pychon项目目录下
Base interpreter :设置python解释器的路径,稍微等待一下,会自动检索配置
Inherit global site-packages:勾选上代表创建的新项目需要copy一份全局包到虚拟环境,即可以使用base interpreter中的第三方库,不选将和外界完全隔离,==必须勾选==
Make available to all projects:勾选上,表示,当在虚拟环境下安装包的时候,copy一份到全局
注意:
全局包存放在python安装目录下:C:\Users\Administrator\AppData\Local\Programs\Python\Python38\Lib\site-packages(要打开隐藏)
虚拟环境包安装在关联的项目目录下面的${虚拟环境名}\Lib\site-packages子目录里
本机的:D:\Python\test\venv\Lib\site-packages)
  • 新建python程序源文件

第一部分 python基础部分_第10张图片

  • 工作环境设置

  • 改变编辑界面字号:File->Settings->Editor->Font->Size->20

  • 添加解释器:File->Settings->Project :项目名>Project Interpreter ->点击加号(+)输入解释器名进行搜索安装

  • 更换下载库源:File->Settings->Project :项目名>Project Interpreter ->点击加号(+)->Manage Repositories->删除默认源->添加新源(阿里云https://mirrors.aliyun.com/pypi/simple)->重启pycharm

  • pip 默认下载源更改

  • pip : 是python默认的软件工具包,安装python时默认自动安装

  • Python 的 pip 工具安装第三方包时默认会去 https://pypi.org/ 下载,由于“某些原因”,下载速度会很慢

  • 配置阿里云镜像的pypi(Python 编程语言的软件存储库):

  • 在Windows中定位目录:C:\Users\Administrator

  • 新建目录:pip

  • 进入pip目录后新建配置文件:pip.ini

  • 点击pip.ini配置文件单右选择“编辑

  • 输入阿里源的配置命令:

[global]
index-url = https://mirrors.aliyun.com/pypi/simple/
​
[install]
trusted-host=mirrors.aliyun.com
  • 保存退出,在命令行中输入 pip install pygame 进行测试

  • pip命令格式: pip [options]

  • 查看帮助:pip help

  • 升级pip:pip install --upgrade pip 或者 pip install -U pip

  • 安装:pip install 包名

  • 安装指定版本:pip install 包名==版本号(如:pip install matplotlib\==3.4.1)

  • 临时指定源来安装:pip install -i pip源地址 包名

清华: https://pypi.tuna.tsinghua.edu.cn/simple
阿里云: http://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
华中理工大学: http://pypi.hustunique.com/
山东理工大学: http://pypi.sdutlinux.org/
豆瓣: http://pypi.douban.com/simple/

例:pip install -i http://mirrors.aliyun.com/pypi/simple/ pygame
  • 下载包但是不安装:pip download 包名 -d "某个路径"

  • 卸载:pip uninstall 包名

  • 更新:pip install --upgrade 包名

  • 查看所有安装的包:pip list

  • 查看需要升级包:pip list -o

  • 查看某个包信息:pip show -f 包名

第一个python程序:九九乘法表

import time              #导入模块
print("Loading:",end='')
for i in range(5):
    print(".",end = '',flush = True)
    time.sleep(0.5)
print("\n\t\t\t九九乘法表")
print(end='\t')
for i in range(1,10):
    print(i,end='\t')
print()
print(end='\t')
for i in range(1,34):
    print(end='-')
print()
for i in range(1,10):
    print(i,end='\t')
    for j in range(1,10):
        if i>=j:
            print(i*j,end='\t')
    print()

运行:点击RUN 或 绿三角 或 ALT+SHIFT+F10 或 F9

注释

作用:更易于阅读理解代码,编译时会忽略,运行结果不显示,但在代码维护、解释、测试等等方面,发挥着不可或缺的重要作用,具体的注释专题,有大量的高水平文章和论述,请自行搜索并学习

语法:

  • 单行注释:#注释内容 ,一般用于解释语句

#!/usr/bin/python3    
# 下面这个方法的作用是…..
# 第一个注释
# 我是单行注释
# 这是一个空的函数,它什么都不干。本条注释也是句废话。
defmain():
    pass   # pass表示占位,什么都不做。那我为什么要注释它呢???
pass语句是占位语句,它什么都不做,只是为了保证语法的正确性而写。以下场景中,可以使用pass语 句:
当你不知道后面的代码怎么写的时候
当你不需要写代码细节的时候
当语法必须,又没有实际内容可写的时候
其它的一些你觉得需要的场景
  • 多行注释:‘’’注释内容’’’ 或 “””注释内容””” ,一般用于python的文件、模块、类等添加版权、功能等注释信息,并为 _doc_文档提供内容,这些内容可以通过现成的工具,自动收集起来,形成帮助文档,也是一种文档注释

def func(a, b):
    """ 这个是函数的说明文档。 
    :param a: 加数
    :param b: 加数
    :return:  和
    """
    return a+b
class Foo:
    """
    这个类初始化了一个age变量
    """
    def __init__(self, age):
        self.age = age

==需要强调的是这类注释必须紧跟在定义体下面,不能在任意位置==

代码头两行

  • 很多时候,我们在一些py脚本文件的开头都能看到类似的以#开头的这样两行代码,它们不是注释,是一些设定

#!/usr/bin/env python
# #  -*-  coding:utf-8  -*-
  • 第一行,用于指定运行该脚本的Python解释器,Linux专用,windows不需要。env方式下,系统会自动使用环境变量里指向的Python

  • 第二行,是程序自己本身的字符编码方式,-*-没有特殊作用,只是美化代码

代码规范(PEP8:python增强建议书8代码样式指南)

通过缩进表示代码块包含控制关系,不需要写{},一般推荐为tab(4个空格)或空格,同一代码块空格个数必须一致

一行可以书写多条语句,使用分号隔开,但不推荐,因为这样会造成阅读理解困难,维护耗时,容易出错,若一条语句太长可以使用(\)反斜杠实现多行语句,如:

string = "i love this country,"\
         +"because it is very beautiful!"\
         +"how do you think about it?"\
         +"Do you like it too?"

在 [], {}, 或 () 中的多行语句,可以不需要使用反斜杠(),直接回车,接着写。例如:

result = subprocess.Popen("ipconfig /all",
                          stdin=subprocess.PIPE,
                          stdout=subprocess.PIPE,
                          stderr=subprocess.PIPE,
                          shell=True, check=True)

PEP8建议:每一行的字符不超过80个。该换行时咱就换行!

区分大小写字母

变量不需要直接定义即可使用

print 默认输出是换行的,如果要实现不换行需要在变量末尾加上 end=""

2.第二章 基本数据类型


2.1概念:按被定义的性质、表示形式、占据空间大小、构造特点进行分类,结构如下。

list列表 一维数组 []

tuple元组() 不能该值

dictionart { }

2.2.常量

2.2.1.概念:在程序运行期间,值不会发生变化的量,一般通过人工初始

化或键盘输入实现

2.2.2整数(int)

  • 十进制格式:数字、正负号组成,位数任意 如:100、256、0、-248,python3可以使用下划线 _ 对数据进行分割,以便阅读记忆

a=21_47_48_36_47
b=-2048
C=0123
  • 八进制格式:以0o开头或00开头,后面跟上八进制数字0-7,如:0o12 0o7770o789(错误)

python2中八进制是以0开头的注意:可以调用oct()方法输出八进制

a=7777
print(oct(a))
  • 十六进制格式:以0x或0X开头,后面跟上十六进制数字(0-9,A-F),如:0 xFFFF0x25 0xAA -0x456 可以使用hex()函数实现十六进制的输出

a=65535
print(hex(a))
  • 二进制格式:以0b或者0B开头后跟上0或1,逢二进一,如:0b10110B1101,调用bin()函数实现二进制的输出

a=127
print(bin(a))

2.2.3 浮点数(float)

  • 小数表示法:由符号、数字、小数点组成,如:-2.5,3.0 ,15.

  • 科学计数法:又叫指数表示法,由符号、尾数、阶码符号(E或e)、阶码数字组成 如:xey

如 -2.5e3 -> -2.5*10^3 3E5 3.4e-3

  • 原则如下: xEy

E后必为整数

e后不能由空格

x和y一个都不能少

  • 注意:注意:浮点数运算可能出现小数位不确定的情况,如:0.1+0.2数学上为0.3,实际python解释器计算时为0.30000000000000004,这是由于浮点数转为二进制时会有误差,尽量避免浮点数的比较

if 0.1+0.7 == 0.8:
    print('yes')
else:
    print('no')

2.2.4 布尔类型(boolean)

  • 作用:用于表示真与假,本质为数字类型

  • 组成:True False

  • True和False 第一个字母必须大写

  • 意义:True表示1,False表示0,可以进行数学运算,如

print(True+1) # 2

  • 注意:python2中无布尔类型,使用1和0表示

2.2.5 字符串

  • 本质:python中的字符串本质是一种序列,其值本质为串首地址,是一个抽象的概念,值不可改变

  • 定界符:‘单引号’ ”双引号“ ”“”三引号“”“

  • 注意:定界符首尾得相同

三引号使字符串分布多行

a="""china
    china
    china"""
  • 作用:以反斜杠(\)开头的特定字符串序列,表述特殊功能的字符串

  • 常见转义字符

转义字符

作用

\n

回车换行hang

\r

回车(输入点置为行首)

\t

制表符,tab键

\b

退格键,光标向左移动一列(不会删除)

\f

换页

\\

输出一个反斜杠

\'

输出一个单引号

\"

输出一个双引号

\000

\yyy

以开头后跟三位八进制

\xyy

以x开头后跟2位十六进制数字

print('\100',\x40')

print('a\bi\'lh\bovi\be\'\\\byou\'\n')
输出为:i'love'you'

a被i盖住了 会覆盖

转义字符功能失效:使得转义字符功能失效,只需在定界符之前增加r或R

print(r'c:\windows\new') 或print('c:\\windows\\new')

2.3变量


2.3.1变量名

变量名又称为标识符,用于标识变量空间、函数、类等的名称

组成:字母、下划线、数字组成,不能以数字开头,name:mod_123 3word(错误) a.dat(错误) print

注意:变量名字母区分大小写

变量名不能使用python保留字(关键字),保留字查看

import keyword
print(keyword.kwlist)
​
#结果
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']

python以下划线开头的标识符有特殊意义,一般需要避免使用

单下划线开头,如:_ width,表示不能直接访问的类属性双下划线开头,如: _ _ add,类私有成员双下划线开头和结尾,_ _ _init _ _()构造函数

  • python支持汉语变量名,但不推荐,

中国='china'

print(中国)

2.3.2.变量定义·格式:变量名=value(=念做赋值,不是等于)python中变量不需要声明类型,通过存储的数据动态变化

a = 4
b = 'china'
c = []
d = 95
e = a+d
  • 新的变量通过赋值动作进行开辟内存空间,保存数据,若变量未赋值直接引用会抛出异常

X

print(x)
​
Traceback (mostrecentcalllast):
File"D:\python\testl\test.py",line1,in
  X
NameError:name'x'isnotdefined
  • 变量类型是通过赋值动态变化的:

  number =2048
  print(type(number))
  number'china'
  print(type(number))
  number =3.14
  print(type(number))
​
#结果:



​
#type()测试数据类型的函数

2.3.3 变量是什么

  • python中一切数据皆为对象,变量是对象的引用

  • 对象是分配的一块内存空间,拥有特定的值,支持特定的操作,是一种容器

  • 例子

a=b=1024
print(id(a),id(b))
a=2048
print(id(a),id(b))
  • a=2系统执行2步,建立一个对象空间存储数据2,对其贴上标签2进行绑定

  • a=10,将标签a从存储数据2的对象空间中撕下来,贴到存储10的对象空间中

  • b=a,表示对象10贴了2个标签a和b

  • 变量是一个系统表元素,拥有指向对象的链接空间,可以理解为是一种标签或名字

2.3.4 整形变量对象占用字节数

import sys
​
print(sys.getsizeof(int()))
print(sys.getsizeof(float()))
​
#结果 24  24
import sys
​
a=0
print('a=0',sys.getsizeof(a))
a=1
print('a=-1',sys.getsizeof(a))
a=-1
print('a=1',sys.getsizeof(a))
a=2**30-1
print('a=2**30-1'sys.getsizeof(a))
a=2**30
print('a=2**30'sys.getsizeof(a))
a=2**60-1
print('a=2☆*60-1',sys.getsizeof(a))
a=2**60
print('a=2**60',sys.getsizeof(a))
  • python3中不再区分int(普通) 和 long int (长整型),统称int

  • python3中int型是动态长度,理论支持无限大的数字(不能超出虚拟内存大小)

  • 结论:python3中int型数据0占用24B,其它占用28B,每逢230增量4B,float数据占24B

2.4.运算符与表达式


2.4.1.常见云算符优先级

运算符

作用

**

幂(最高优先级)

~ + -

取反 、 正号 、 负号

* / % //

乘 除 取余 取整数

+ -

加法 减法

>> <<

右移 左移

&

按位与

^

按位异或 (相同为0 , 不同为1)

|

按位或

<= < > >=

比较运算符

== !=

等于 不等于

is is not

身份运算符

in not in

成员运算符

not and or

逻辑运算符

= %= /= //= += -= &*=

赋值运算符

逗号运算符 (最低)

2.4.2.算术运算符

  • 组成:+·*/川(取商的整数)**(幂)

  • 除法():结果为浮点数,如:1/2->0.5

  • 整除():又称为地板除,计算除法,返回值不大于除法结果的一个最大整数,余数舍弃 7//3 -> 2 -9//2 -> -5

  • 例:计算一元二次方程的2个实根,a!=且b^2-4ac>0

第一部分 python基础部分_第11张图片
import math
​
a = float(input('请输入二次项系数'))
b = float(input('请输入一次项系数'))
c = float(input('请输入常数项'))
x1 = (-b+math.sqrt(b*b-4*a*c)) / (2*a)
x2 = (-b-math.sqrt(b*b-4*a*c)) / (2*a)
print('x1=', x1, 'x2=', x2)
  • 注意:math.sqrt()开平方根函数,之前需要导入,input()是输入函数,由于返回值为字符串则需要使用floati进行强制类型转换

  • 取余(%)

  • 取出表达式的余数即模运算,取余左右两边可以为小数,a%b结果符号与除数b相同,且除数b不能为0

  • 例子:5%3-> 2 3%5-> 3 1.5%2-> 1.5 3.5%2-> 1.5 -1%2-> 1 5%-2> -1 50%30->20

  • 例子:输入一个四位数,输出每一位及后三位

  • 如:1234

  • 千位:1

  • 百位:2

  • 十位:3

  • 个位:4

  • 后三位:234

x = int(input('请输入一个四位数:'))
print('千位=', x//1000)
print('百位=', x//100%10)
print('十位=', x//10%10)
print('个位=', x%10)
print('后三位=', x%1000)
  • 常见数学运算函数

  • int():强制类型转化为int型

  • float():强制转为float型

  • str():强制转为字符串

  • abs():返回整数的绝对值

  • math.modf(): 返回小数的整数部分和小数部分

  • math.sqrt(): 计算算术平方根

  • round(x,n):四舍五入,保留n位小数

  • 例:对浮点数进行四舍五入,如8.32433->8.32 8.32533->8.33

#法一
x=float(input('请输入一个四位数:))
print(round(x,2))
#法二          
x=float(input('请输入一个四位数:'))
X=int(x*100+0.5)/100
print('四舍五入:',x)             
8.3233*100
832.533+0.5
833.033int
833/100
8.33

2.4.3 赋值运算符

  • 简单赋值运算符

  • 作用:将赋值运算符右侧的结果存储到左侧空间中,本质为覆盖

  • 注意:赋值运算符左侧只能是变量,例:3=5 错误, a+1=10 错误

  • 例子:交换变量

#法一
a=3
b=5
t=a
a=b
b=t
print(a,b)
#法二
a=3
b=5
a=a+b#a->8
b=a-b#b->3
a=a-b#a->5
print(a,b)   #空间复杂度小
#法三
a=3
b=5
a,b=b,a
print(a,b)
#法四
a=3
b=5
a=a^b  #按位异或
#0011
#0101
#110#a=6
b=a^b
#0110
#0101
#0011#b=3
a=a^b
#0110
#0011
#0101#a=5
print(a,b)
  • 复合赋值运算符

  • 符号:+= -= *= /= %= //= ……

  • 作用:复合赋值运算,运算时进行展开

  • 例子:

a=5
a+=2->a=a+2

a=5
a*=3+2   # a=a*(3+2)  #注意:展开后原右侧表达式会自带圆括号,提升优先级
print(a)

2.4.4 关系运算符

  • 组成:> >= < <= == !=

  • 作用:进行比较运算

  • 结果:关系运算符组成的关系表达式运算结果为true (1成立) ,false(0不成立)

  • 例子:true > 0 ->true

a

  • 例子: x%2==0 (常用) !(x%2) x==x//2*2 偶数的判断

  • 注意:== 表示左右结果是否相等,与 赋值号=应有所区别,如:a=12==3 a->False

2.4.5 身份运算符:is

  • 作用:用来判断两个变量是否引用自同一个对象,即is是用来判断两个变量的地址是否相同,is not 是判断两个变量是不是引用自同一个对象

  • 例子:在pycharm脚本模式下执行

a=1000
b=1000
print(a==b)#true
print(aisb)#true
print(id(a),id(b))
#脚本执行时,会被认同为一个代码块,变量值若以存在,会被重用
  • 例子:在交互式的命令提示符中输入(console):

第一部分 python基础部分_第12张图片
>>>a=b=1000  # 用一个代码块
>>>print(aisb )
#true
#a=b=1000,命令行中一行为一个代码块,在同一个代码块中初始化对象时,会检查其值是否已存在,若存在直接重用
​
>>>a=50
>>>b=50
>>>print(aisb)
#true
​
>>>a=256
>>>b=256
>>>print(aisb)
#True
​
>>>a=257
>>>b=257
>>>print(aisb)
#flase

#python的垃圾回咋机制有一个称为“小整数对象池”技术,为了优化执行速度,节省内存存储空间,解释器会把[-5,256]之间的数据提前存放至小整数对象池空间中,程序中只要引用到[-5,256]之间的整数则不会重新建立内存空间,都是引用对象池中的数据,若超出其范围则会重新开辟内存空间来存储

2.4.6逻辑运算符

  • 优先级:not > and > or

  • 注意:

  • x or y : x为真,值为x ,短路运算

  • x and y : x为假 ,值为假 ,短路运算

  • 数字零、空对象、特殊对象None都被认作False

2.4.7成员运算符 : in 和 not in

  • python独有的运算符(都是小写字母),用于判断对象是否是某个集合的元素之一,运算速度快,返回值为布尔类型

  • 例:

list1 = [1, 2, 3, 4, 5, 6]
a = 1
if a in list1:
    print('a是list1的元素之一')
else:
    print('a不是list1的元素')

2.4.8三目运算符

  • 格式:result= 为真的结果 if 判断条件 else 为假时的结果

a = int(input())
b = int(input())
max = a if a>b else b
print(max)

2.5输入与输出

2.5.1标准print()函数实现输出

  • 格式:print(*objects,sep=' ',end='\n',file=sys.stdout)

  • 参数

  • object:表示输出对象,数量自定,输出多个对象时xu'y增加逗号作为间隔符

  • sep:间隔符,默认为一个空格

  • end:用来设定什么作为输出结尾,默认为\n,

  • file:要写入的文件对象

  • 输出示例

print(1, 2, 3, 4, 5) #1 2 3 4 5
print(1, 2, 3, 4, 5, sep=',') # 1,2,3,4,5
print('hello', 'world') # hello world
print('www.openlab.com')  # www.openlab.com
print('www', 'openlab', 'com', sep='.')  # www.openlab.com
for i in range(5):
    print(i, end='\t')  #0  1   2   3   4   
​
for i in range(100):
    print(i, end='\t')
    if i%10 == 0:
        print()
print()
str = 'hello '
print(str*2)  # 注意:* 表示复制几份
​
print(5*str) #  hello hello hello hello hello 
​
print(str+'wprld')  # 注意: + 表示字符串链接  hello wprld
​
fp = open(r'd:\test.txt', 'w')  # 打开文件
print('2023,你好', file=fp)
fp.close() #  关闭文件
2.5.2 格式化print()输出
  • 无符号八进制:%o,无符号十六进制:%x(%X),无符号整数:%u,整数:%d

num1=10
num2=20
print('八进制输出:0o%o,0o%o'%(nUm1,num2))
#八进制输出:0o12,0o24
print('十六进制输出:0x%X,0x%X'%(nUm1,nUm2))
#十六进制输出:0xA 0x14
  • %f:浮点型数据,小数后6位,第7位四合五入

print('%f'%1.23456789)
  • %e:科学计数法输出

print('%e'%123.456) #1.23456e+02

  • %g:保留六位有效数字的前提下,使用小数方式,否则使用科学计数法

  • %s:输出字符串

print('%s'%'china')

2.5.3 带有修饰符的格式化输出

  • %md:表示输出m位十进制,m位最小列宽,默认右对齐,若小于m位,则左起补空格,若大于m列,则原样输出,例子:

a=123
b=456
print('%5d' % a)   #输出  123   左边两空格
print('%2d' % a)   #输出123 原样输出
print('%05d' % a)  #输出00123  
print('%-5d%d' % (a,b)  #输出123  456  左对齐
  • %m.nf:表示输出float小数,m为总宽度(包含小数点),n为小数位数,小于n表示小数位数不足则右起补零,大于n则n+1位四舍五入,m省略时值同n

a=123.456
print('%10.4f'%a)  #  123.4560
print('%10.2f'%a)   #    123.46
print('%.2f'%a)    #123.46
str = 'hello world'
print('%10.2s'%str)
#        he
print('%-10.2s%s'%(str,str))#he        hello world

2.5.4使用input()函数实现输入

  • 格式:变量名=input(提示文字)

  • 返回值:字符串

  • 注意:需要使用强制类型转换函数进行转换

age=int(input('请输入年龄:'))

2.6图形化程序设计


2.6.1Turtle是python()内置的绘图函数,可以实现线条、矩形、圆等形状绘制

2.6.2 常见方法

方法

作用

showturtle()

显示当前的位置及方向

write(string)

绘制一个文本字符串

forward(int)

向箭头方向移动int个像素并绘制直线

right(int)

转向int度

color(string)

颜色

goto(int,int)

移动到指定位置

penup()

抬起笔

pendown()

放下笔

circle(int)

绘制半径为int的圆

done()

绘制完毕

第一部分 python基础部分_第13张图片
import turtle
​
turtle.pensize(10)  # 粗细
turtle.right(60)  # 画笔转向
turtle.forward(100)
turtle.right(120)
turtle.forward(100)
turtle.right(120)
turtle.forward(100)
turtle.done()   # 三角形
​
​import turtle
t.pensize(10)
t.color('red')
t.right(72)
t.forward(100)
t.right(144)
t.forward(100)
t.right(144)
t.forward(100)
t.right(144)
t.forward(100)
t.right(144)
t.forward(100)
t.done()
​
​
import turtleast
t.pensize(5)
t.color('blue')
t.penup()
t.goto(-110,-25)
t.pendown()
t.circle(45)
​
t.penup()
t.color('black')
t.goto(0,-25)
t.pendown()
t.circle(45)
​
t.penup()
t.color('red')
t.goto(110,-25)
t.pendown()
t.circle(45)
​
t.penup()
t.color('yellow')
t.goto(-55,-75)
t.pendown()
t.circle(45)
​
t.penup()
t.color('green')
t.goto(55,-75)
t.pendown()
t.circle(45)
t.done()
第一部分 python基础部分_第14张图片
第一部分 python基础部分_第15张图片
第一部分 python基础部分_第16张图片

第三章 程序流程控制


3.1顺序结构

3.1.1程序设计的一般面向过程思路

  • 变量初始化(名称 个数 初始值)

  • 输入(input())

  • 处理 (算法)

  • 输出 (print())

3.1.2原则:自顶向下,逐步细化,由上到下逐条执行,即书写顺序就是执行顺序,清晰第一,效率第二

3.1.3 例:输入一个华氏温度,要求输出摄氏温度,公式,c=5/9*(f-32)

#定义变量初始化 输入
F=int(input('请输入一个华氏温度'))
#算法
c=5/9*(F-32)
#输出
print('摄氏温度',c)

3.1.4例子:从键盘输入2个整数a和b,合成一个新四位数c a=12 b=34 c=1324

a = int(input('请输入一个两位数:'))
b = int(input('请输入一个两位数:'))
c = a//10*1000+b//10*100+a%10*10+b%10
print('新四位为:', c)

3.1.5例子:财务人员给员工发工资时经常遇到如下问题:根据每个人的工作金额计算人民币的张数,且要求总张数最少

z = int(input('请输入金额'))
print('100的张数', z//100)
z = z%100
print('50的张数', z//50)
z = z%50
print('20的张数', z//20)
z = z%20
print('10的张数', z//10)
z = z%10
print('5的张数', z//5)
print('1的张数', z%5)

3.1.6例子:输入三角形的三边长度,计算面积:

已知三角形三边长度为a,b,c,面积公式为:area=sqrt(s(s-a)(s-b)(s-c))其中s=(a+b+c)/2

import math
​
a = int(input('a='))
b = int(input('b='))
c = int(input('c='))
if (a+b<= c) | (a+c<= b) | (b+c<= a):
    print('该三边无法形成三角形')
else:
    s = (a+b+c) /2
    area = math.sqrt(s* (s-a) * (s-b) * (s-c))
   # area = (s * (s - a) * (s - b) * (s - c))**0.5
print('area=', area)

3.2 选择结构

3.2.1 单分支结构

  • 语法:

if 表达式:

语句块

  • 流程图:

第一部分 python基础部分_第17张图片
  • 例1:输入2个数,输出最大值

a = int(input())
b = int(input())
max = a
ifa
  • 例2:输入一个数,判断是否被7或11整除,不能同时整除

num = int(input('请输入数字:'))
if (num%7 == 0 or num%11 == 0) and num%77!= 0:
    print('yes')
else:
    print('no')
  • 例3:判断是否是闰年

year = int(input('请输入四位数的年份:'))
if year%4 == 0 and year%100!= 0 or year%400 == 0:
    print('闰年')  # 能被4整除但不能被100整除或者能被400整除
else:
    print('平年')

3.2.3多分枝结构

  • 语法1:

if 表达式1:

语句块1

else:

if表达式2:

语句块2

else:

if 表达式3:

语句块3

……

  • 语句2:

if表达式1:

语句块1

elif 表达式2:

语句块2

elif 表达式3:

语句块3

else:

……

  • 程序流程图:

第一部分 python基础部分_第19张图片
  • 例子:输入一个百分制成绩,输出等级成绩

x>=90 优秀

90>=x>=80 良好

80>=x>=60 合格

x<60 补考

#法一
num = int(input('请输入一个百分制成绩:'))
if num<0 or num>100:
    print('请再输入0-100之间的程序')
else:
    if num>= 90:
        print('优秀')
    else:
        if num>= 80:
            print('良好')
        else:
            if num>60:
                print('合格')
            else:
                print('补考')
  
​
#法二
num = int(input('请输入一个百分制成绩:'))
if num<0 or num>100:
    print('请再输入0-100之间的程序')
elif num>= 90:
    print('优秀')
elif num>= 80:
    print('良好')
elif num>60:
    print('合格')
else:
    print('补考')

3.2.4注意:

  • if和else之后的冒号不能省略

  • else elif不能单独使用必须配合if进行处理

  • if-else是通过tab缩进表达控制关系,需要注意

3.3 循环结构

3.3.1while循环

  • 格式:

while 条件表达式:

循环体

  • 流程图:

第一部分 python基础部分_第20张图片

3.3.2 for循环

  • 格式:

for 迭代的变量 in 对象(列表等):

循环体

for 迭代变量 in range(start,step)

循环体

  • range()函数

  • python3内置函数,用于生成一系列的连续整数

  • start:计数的起始值,省略则为0

  • end:计数的终止值,不包含,如:range(7),代表生成0-6,end参数不可省略

  • step:步长,若省略默认为1

  • 例子:计算1+2+3+4+……100

# while
sum = 0
i = 1
while i<= 100:
    sum += i
    i = i+1
print(sum)
​
# for
sum = 0
for i in range(1, 101):
    sum += i
    i += 1
print('sum:', sum)
  • 注意

  • 循环条件一般为关系表达式或者逻辑表达式,为非0时执行循环体,0时循环结束

  • 循环条件尽量使用开区间

  • 循环嵌套:长循环在内短循环在外以减少循环跨越次数,提高效率

for i in range(10):
    for j in range(3):
        pass
    
for j in range(3):  # 选择
    for i in range(10):
        pass

3.4 程序实例

3.4.1 累加和

  • 框架

sum=0

for i in range(终止值):

sum=sum+新项

新项一般与循环迭代变量i有关或者与前后项关系有关

  • 例子:计算1+1/2+1/3+1/4+……1/100

sum = 0
for i in range(1, 101):
    sum = sum+1/i;
    i += 1
print('sum=', sum)  
#结果sum= 5.187377517639621
  • 例子:计算1-1/2+1/3-1/4+1/5……-1/100

sum = 1
f = -1
for i in range(2, 101):
    sum = sum+1/i*f
    f = -f  # 符号位切换
print('sum=', sum)
#sum= 0.688172179310195
  • 例子:计算1+1/2-1/3+1/4-1/5……+1/100

sum = 1
f = -1
for i in range(2, 101):
    sum = sum+1/i*-f
    f = -f
print('sum=', sum)
  • 计算下列多项式:

第一部分 python基础部分_第21张图片

n = int(input('n:'))
sum1 = 0
sum2 = 0
for i in range(1, n+1):
    sum1 = sum1+i
    sum2 = sum2+1/sum1
print('sum=%.6f', sum2)
  • 例子:计算下列多项式的结果:前20项之和

第一部分 python基础部分_第22张图片

新的分子=旧的分子+旧分母新的分母=旧分子

a = 2
b = 3
sum = 0
for i in range(20):
    sum = sum+b/a
    t = a+b
    m = b
    b = t
    a = m
print('sum=.6f'%sum)
  • 例子:计算下列多项式的结果:n的值

第一部分 python基础部分_第23张图片
pi = 1
i = 3
f = -1
while 1/i>1e-6:#多项式某项值大于1e-6说明误差太大需要独述铁代
    pi = pi+1/i*f
    f = -f
    i += 2# 分母
print('pai=%.6f'% (pi*4))
  • 例子:用泰勒级数计算e的近似值,e=1+1/1!+1/2!+1/3!+……1/n!

sum = 1
t = 1
i = 1
while 1/t>1e-6:
    t = t*i
    sum = sum+1/t
    i += 1
print('e=%.6f'%sum)
#e=2.718282
  • 例子:计算a+aa+aaa+aa...aa ,若a=2,计算前6项之和

2 a=2

22 a=a*10+2 ? a

222

2222

22222

a = 2
sum = 0
for i in range(6):
    sum += a
    a = a*10+2
print('sum=', sum)
#sum=246912

3.4.2 素数判断

  • break语句:终止当前循环,执行循环外的下一跳语句,一般会和if配对使用,例:计算的r=1到r=10的圆面积,直到100为止

import math
​
for r in range(1, 11):
    area = math.pi*r*r
    if area>100:
        break
print('r:', r, 'area is :%.6f '%area)
  • continue语句:跳出当次循环,继续执行下一次循环,continue语句之后循环语句之前所有的语句不再执行,例子:计算100到150之间不能被3整除的数,要求一行输出10个(加速循环)

i = 0
for n in range(100, 151):
    if n%3 == 0:
        continue
    print(n, end=' ')
    i += 1
    if i%10 == 0:
        print()
  • for-else结构:for循环执行完毕(for循环不是通过break跳出而中断的)或者未进入循环的情况下执行else后的语句

for i in range(1, 100):
    if i%2 == 0 and 1%3 == 0 and 1%5 == 0:
        print('%d是2、3、5的最小公倍数'%i)
        break
else 
    print('未找到')
  • 执行过程:当for循环正常执行完毕(range()中超出范围)则执行else之后的语句块,若执行break异常跳出循环则不会执行else后的语句块此例中break不可删除,若删除则不能保证找到最小公倍数,同时由于没有中断机制使得for顺利执行完毕则会执行else后的语句块,输出结果矛盾

  • 注意:for…if......break..else…为基本结构

  • while......else也同理

  • 素数:只能被1和自己整除

  • 例子:输入一个整数,判断是否为素数

#法1
prime=int(input('请输入一个大于等于2的整数:'))
if prime<2:
    print('数据错误,请输入大于等于2的整数')
else:
    for i in range(2,prime):
        if prime%i==0:
            print('平数')
            break
        else:
            print('素数')
  • 例子:

#法2
i=2
prime=int(input('请输入一个大于等于2的整数:'))
if prime<2:
    print('数据错误,请输入大于等于2的整数')
else:
    while prime%i:
        i=i+1
    if i == prime:
        print('素数')
    else:
        print('平数')
  • 例3:

#筛选法:素数的倍数一定不是素数,给出序列2-50,去掉2的倍数,去掉3的倍数,去掉4的倍数……,剩余一定为素数

3.4.3 穷举搜索

  • 原则:在指定范围内寻找符号条件的数

  • 框架:

for i in range(起始值,终止值):
	if 条件判断:
		处理
例子:输出100以内的素数
for i in range(2, 100):  # 穷举2-99之间
    for j in range(2, i-1):  # 判断i是否为素数
        if i%j == 0:
            break
    else:
        print(i, end=' ')
  • 例2:输出大于m且紧随m的k个素数,如:m=5,k=3,结果为:7 11 13

m = int(input('请输入起始值'))
k = int(input('请输入个数:'))
i = m+1  # 从m+1开始搜索
count = 0# 记录找到的素数个数
while count
  • 例3 输出200-400之间的非素数

for i in range(200, 400):
    for j in range(2, i):
        if i%j == 0:
            print(i, end=' ')
            break
  • 例子:输出水仙花数:是一个三位数、每一位的立方和等于原值,153=1^3+5^3+3^3

for i in range(100, 1000):
    if (i%10) **3+ (i//10%10) **3+ (i//100) **3 == i:
        print('水仙花数:', i)

#水仙花数: 153

#水仙花数: 370

#水仙花数: 371

#水仙花数: 407

  • 例子:输出1000以内的完数,完数:因子之和等于原值,6==1+2+3

for i in range(6, 1000): #穷举6-999
    sum = 0#因子之和清零
    for j in range(1, i):  # 查找因子
        if i%j == 0:
            sum += j
    if sum == i: # 判断完数
        print(i, end='\t')  # 6 28 496
  • 例子:查找100以内的同构数,同构数:一个正整数出现在它的平方数右侧,如:5==25 6==36

25==625
for i in range(1, 100):
    if i == i*i%10 or i == i*i%100:
        print(i, end='\t')
#1  5   6   25  76  
  • 例子:输出100以内能被9整除余数为2的整数,并计算平均值的平方根

sum = 0
a = 0
num = 0
for i in range(1, 100):
    if i%9 == 2:
        print(i, end=' ')
        num = num+1
        sum += i
        a = (sum/num) **0.5
print()
print(a)

3.4.4 数学问题

  • 例子:判断回文数

你可能感兴趣的:(python)