Python是一种跨平台、开源、免费、的高级程序设计语言。
Python是面向对象、解释型、动态数据类型的高级程序设计语言。
Python是一种脚本语言
Python的设计哲学为:优雅、明确、简单 ,相比C或C++代码量大大减少,代码质量大大提高,“Life is short,you need Python” 即“人生苦短,我用Python”
Python是一种扩充强大的编程语言,拥有丰富和强大的库,Python能够把其它语言制作的各种模块轻松的链接在一起(尤其是C/C++),又称为“==胶水==”语言
其实⽬前很多知名的机器学习、⼈⼯智能以及深度学习框架也都是基于Python语⾔进⾏开发的:
Google开源机器学习框架:TensorFlow开源社区主推学习框架:Scikit-learn百度开源深度学习框架:Paddle
2020 年 1 月 1 日, 停止 Python 2 的更新,Python 2.7 被确定为最后一个 Python 2.x 版本
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版本。
解释器下载网址:https://www.python.org/
选择安装包:Windows installer (64bit)
安装解释器:
选择Customize installation 自定义安装,建议不要选择上面的默认安装
Add Python3.8 to PATH一定要打勾,表示自动配置环境变量
Documentation(安装帮助文档)
pip(安装下载python包的工具pip)
td/tk and IDLE(安装Tkinter和IDLE开发环境)
Python test suite (安装标准测试套件)
py launcher (启动器)
for all users (安装所有用户都可启动python的快捷方式)
测设安装是否成功:打开运行输入CMD启动命令行输入python :
下载:https://www.jetbrains.com/pycharm/download/#section=windows
Professional(专业版本) : 功能更加强大,主要是为Python和web开发者而准备,是需要付费
community(社区版本) :轻量级,主要是为Python和数据专家而准备的
新建项目:选择 Create New Project
新建项目设置
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程序源文件
工作环境设置
改变编辑界面字号: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
查看帮助: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 包名
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()
作用:更易于阅读理解代码,编译时会忽略,运行结果不显示,但在代码维护、解释、测试等等方面,发挥着不可或缺的重要作用,具体的注释专题,有大量的高水平文章和论述,请自行搜索并学习
单行注释:#注释内容 ,一般用于解释语句
#!/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
第二行,是程序自己本身的字符编码方式,-*-没有特殊作用,只是美化代码
通过缩进表示代码块包含控制关系,不需要写{},一般推荐为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=""
list列表 一维数组 []
tuple元组() 不能该值
dictionart { }
化或键盘输入实现
十进制格式:数字、正负号组成,位数任意 如: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.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')
作用:用于表示真与假,本质为数字类型
组成:True False
True和False 第一个字母必须大写
意义:True表示1,False表示0,可以进行数学运算,如
print(True+1) # 2
注意:python2中无布尔类型,使用1和0表示
本质: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')
变量名又称为标识符,用于标识变量空间、函数、类等的名称
组成:字母、下划线、数字组成,不能以数字开头,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()测试数据类型的函数
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
变量是一个系统表元素,拥有指向对象的链接空间,可以理解为是一种标签或名字
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
运算符 |
作用 |
** |
幂(最高优先级) |
~ + - |
取反 、 正号 、 负号 |
* / % // |
乘 除 取余 取整数 |
+ - |
加法 减法 |
>> << |
右移 左移 |
& |
按位与 |
^ |
按位异或 (相同为0 , 不同为1) |
| |
按位或 |
<= < > >= |
比较运算符 |
== != |
等于 不等于 |
is is not |
身份运算符 |
in not in |
成员运算符 |
not and or |
逻辑运算符 |
= %= /= //= += -= &*= |
赋值运算符 |
, |
逗号运算符 (最低) |
组成:+·*/川(取商的整数)**(幂)
除法():结果为浮点数,如:1/2->0.5
整除():又称为地板除,计算除法,返回值不大于除法结果的一个最大整数,余数舍弃 7//3 -> 2 -9//2 -> -5
例:计算一元二次方程的2个实根,a!=且b^2-4ac>0
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
简单赋值运算符
作用:将赋值运算符右侧的结果存储到左侧空间中,本质为覆盖
注意:赋值运算符左侧只能是变量,例: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)
组成:> >= < <= == !=
作用:进行比较运算
结果:关系运算符组成的关系表达式运算结果为true (1成立) ,false(0不成立)
例子:true > 0 ->true
a
例子: x%2==0 (常用) !(x%2) x==x//2*2 偶数的判断 注意:== 表示左右结果是否相等,与 赋值号=应有所区别,如:a=12==3 a->False 作用:用来判断两个变量是否引用自同一个对象,即is是用来判断两个变量的地址是否相同,is not 是判断两个变量是不是引用自同一个对象 例子:在pycharm脚本模式下执行 例子:在交互式的命令提示符中输入(console):
2.4.5 身份运算符:is
a=1000
b=1000
print(a==b)#true
print(aisb)#true
print(id(a),id(b))
#脚本执行时,会被认同为一个代码块,变量值若以存在,会被重用
>>>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]之间的整数则不会重新建立内存空间,都是引用对象池中的数据,若超出其范围则会重新开辟内存空间来存储
优先级:not > and > or
注意:
x or y : x为真,值为x ,短路运算
x and y : x为假 ,值为假 ,短路运算
数字零、空对象、特殊对象None都被认作False
python独有的运算符(都是小写字母),用于判断对象是否是某个集合的元素之一,运算速度快,返回值为布尔类型
例:
list1 = [1, 2, 3, 4, 5, 6]
a = 1
if a in list1:
print('a是list1的元素之一')
else:
print('a不是list1的元素')
格式:result= 为真的结果 if 判断条件 else 为假时的结果
例
a = int(input())
b = int(input())
max = a if a>b else b
print(max)
格式: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')
%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
格式:变量名=input(提示文字)
返回值:字符串
注意:需要使用强制类型转换函数进行转换
age=int(input('请输入年龄:'))
方法 |
作用 |
showturtle() |
显示当前的位置及方向 |
write(string) |
绘制一个文本字符串 |
forward(int) |
向箭头方向移动int个像素并绘制直线 |
right(int) |
转向int度 |
color(string) |
颜色 |
goto(int,int) |
移动到指定位置 |
penup() |
抬起笔 |
pendown() |
放下笔 |
circle(int) |
绘制半径为int的圆 |
done() |
绘制完毕 |
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()
变量初始化(名称 个数 初始值)
输入(input())
处理 (算法)
输出 (print())
#定义变量初始化 输入
F=int(input('请输入一个华氏温度'))
#算法
c=5/9*(F-32)
#输出
print('摄氏温度',c)
a = int(input('请输入一个两位数:'))
b = int(input('请输入一个两位数:'))
c = a//10*1000+b//10*100+a%10*10+b%10
print('新四位为:', c)
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)
已知三角形三边长度为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)
语法:
if 表达式:
语句块
流程图:
例1:输入2个数,输出最大值
a = int(input())
b = int(input())
max = a
ifa
注意:
表达式一般由常量,变量,关系表达式,逻辑表达式组成
优先级:!(非)> 算术 > 关系 > and > or
if之后的表达式只检测是否为非0或非空,非空字符串
注意分支缩进
语法:
if 表达式:
语句块1
else:
语句块2
流程图
例1:输入一个整数,判断奇数偶数
num = int(input('请输入数字:'))
if num%2 == 0:
print('偶数')
else:
print('奇数')
例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('平年')
语法1:
if 表达式1:
语句块1
else:
if表达式2:
语句块2
else:
if 表达式3:
语句块3
……
语句2:
if表达式1:
语句块1
elif 表达式2:
语句块2
elif 表达式3:
语句块3
else:
……
程序流程图:
例子:输入一个百分制成绩,输出等级成绩
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('补考')
if和else之后的冒号不能省略
else elif不能单独使用必须配合if进行处理
if-else是通过tab缩进表达控制关系,需要注意
格式:
while 条件表达式:
循环体
流程图:
格式:
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
框架
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)
计算下列多项式:
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项之和
新的分子=旧的分子+旧分母新的分母=旧分子
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的值
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
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的倍数……,剩余一定为素数
原则:在指定范围内寻找符号条件的数
框架:
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)
例子:判断回文数