声明,本文是博主在期末复习前的笔记和总结,参照了菜鸟教程中的Python
Python3 教程 | 菜鸟教程 (runoob.com)
Python 中的注释有单行注释和多行注释。
# 这是一个注释
print("Hello, final exam!")
多行注释用三个单引号 ‘’’ 或者三个双引号 “”" 将注释括起来(特别注意的是Python中一般情况下是不会区分单引号和双引号的,在print函数中也是一样的),例如:
'''
这是多行注释,用三个单引号
这是多行注释,用三个单引号
这是多行注释,用三个单引号
'''
print("Hello, World!")
"""
这是多行注释,用三个双引号
这是多行注释,用三个双引号
这是多行注释,用三个双引号
"""
print("Hello, World!")
print函数
Python3中print语句已经没有了,取而代之的是print函数
#python2.6与python2.7部分支持以下语法
print "final exam!"
unicode
Python2 中使用 ASCII 码作为默认编码方式导致 string 有两种类型 str 和 unicode,Python3 只
支持 unicode 的 string。而且Python3中源代码文件默认使用utf-8编码。
行与缩进
python最具特色的就是使用缩进来表示代码块,不需要使用大括号 {} 。
缩进的空格数是可变的,但是同一个代码块的语句必须包含相同的缩进空格数。实例如下:
if True:
print ("Answer")
print ("True")
else:
print ("Answer")
print ("False") # 缩进不一致,会导致运行错误
以上程序由于缩进不一致,执行后会出现类似以下错误:
File "test.py", line 6
print ("False") # 缩进不一致,会导致运行错误
^
IndentationError: unindent does not match any outer indentation level
建议在代码块中每个缩进层次使用单个制表符或者两个空格或者四个空格,不同文本编辑器中的制表符(Tab键)表示的空白宽度不一致,如果使用的代码需要跨平台使用, 不建议使用制表符。
Python的多行语句
Python 通常是一行写完一条语句,但如果语句很长,我们可以使用反斜杠\来实现多行语句,例如:
strl1= ("一句话语句过长,Python 通常是一行写完一条语句,但\
如果语句很长,我们可以使用反斜杠\
来实现多行语句。")
strl2= ("一句话语句过长,Python 通常是一行写完一条语句,但"
"如果语句很长,我们可以使用反斜杠"
"来实现多行语句。")
week=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]
print(strl1)
print(strl2)
print(week)
运行结果:
一句话语句过长,Python 通常是一行写完一条语句,但如果语句很长,我们可以使用反斜杠来实现多行语句。
一句话语句过长,Python 通常是一行写完一条语句,但如果语句很长,我们可以使用反斜杠来实现多行语句。
["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]
Python引号
在python语言中,引号主要表示字符串,可以使用单引号,双引号,三引号,引号必须成对使用。单引号和双引号用于程序中字符串表示,三引号允许一个字符串可以跨多行,字符串中可以包含换行符、制表符以及其他字符,三引号也用于程序中的注释。
变量
Python 中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。
在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型。
等号(=)用来给变量赋值。
等号(=)运算符左边是一个变量名,等号(=)运算符右边是存储在变量中的值。例如:
counter = 100 # 整型变量
miles = 1000.0 # 浮点型变量
name = "runoob" # 字符串
print (counter)
print (miles)
print (name)
#运行结果
100
1000.0
runoob
多个变量赋值
Python允许你同时为多个变量赋值。例如:
a = b = c = 1
以上实例,创建一个整型对象,值为 1,从后向前赋值,三个变量被赋予相同的数值。
您也可以为多个对象指定多个变量。例如:
a, b, c = 1, 2, "runoob"
以上实例,两个整型对象 1 和 2 的分配给变量 a 和 b,字符串对象 “runoob” 分配给变量 c。
基本数据类型
Python3 中有六个标准的数据类型:
Python3 的六个标准数据类型中:
Number(数字)
Python3 支持 int、float、bool、complex(复数)。
在Python 3里,只有一种整数类型 int,表示为长整型,没有 python2 中的 Long。
像大多数语言一样,数值类型的赋值和计算都是很直观的。
内置的 type() 函数可以用来查询变量所指的对象类型。
0.0不是复数,并且表示虚部的实数部分即使是1也不能省略。
>>> a, b, c, d = 20, 5.5, True, 4+3j
>>> print(type(a), type(b), type(c), type(d))
<class 'int'> <class 'float'> <class 'bool'> <class 'complex'>
#复数类型测试
f1=4.5+3j
print(f1)
print(type(f1))
print(f1.real)
print(f1.imag)
#运行结果
(4.5+3j)
<class 'complex'>
4.5
3.0
浮点型可以用十进制或者科学计数法表示
3.56e2,0.25e6,1.5e-3
布尔类型
布尔类型可以看做是一种特殊的整型,python提供了3个逻辑操作符:and,or,not。
布尔型数据只有两个取值:True和False
如果将布尔值进行数值计算,Python3 中,bool 是 int 的子类,True 和 False 可以和数字相加,True= =1、False==0 会返回True,但可以通过is 来判断类型。
>>> issubclass(bool, int)
True
>>> True==1
True
>>> False==0
True
>>> True+1
2
>>> False+1
1
>>> 1 is True
False
>>> 0 is False
False
#测试布尔类型
a1=0
print(type(a1),bool(a1))
a2=0.0
print(type(a2),bool(a2))
a3=0.0+0.0j
print(type(a3),bool(a3))
a4=""
print(type(a4),bool(a4))
a5=[] #列表类型
print(type(a5),bool(a5))
a6={} #字典类型
print(type(a6),bool(a6))
a8=1
print(type(a1),bool(a8))
#运行结果
<class 'int'> False
<class 'float'> False
<class 'complex'> False
<class 'str'> False
<class 'list'> False
<class 'dict'> False
<class 'int'> True
字符串类型
Python中的字符串用单引号 ’ 或双引号 " 括起来,同时使用反斜杠 ** 转义特殊字符。
字符串的截取的语法格式如下:
变量[头下标:尾下标]
索引值以 0 为开始值,-1 为从末尾的开始位置。这个索引图非常重要
str = 'Runoob'
#很明显在元组中是类似左闭右开的区间
print (str) # 输出字符串
print (str[0:-1]) # 输出第一个到倒数第二个的所有字符
print (str[0]) # 输出字符串第一个字符
print (str[2:5]) # 输出从第三个开始到第五个的字符
print (str[2:]) # 输出从第三个开始的后的所有字符
print (str * 2) # 输出字符串两次,也可以写成 print (2 * str)
print (str + "TEST") # 连接字符串
#输出结果
Runoob
Runoo
R
noo
noob
RunoobRunoob
RunoobTEST
很明显在元组中是类似左闭右开的区间,在这一点的基础上可以联系数组。
函数 | 描述 |
---|---|
[int(x ,base]) | 将x转换为一个整数 |
float(x) | 将x转换到一个浮点数 |
[complex(real ,imag]) | 创建一个复数 |
str(x) | 将对象 x 转换为字符串 |
repr(x) | 将对象 x 转换为表达式字符串 |
eval(str) | 用来计算在字符串中的有效Python表达式,并返回一个对象 |
tuple(s) | 将序列 s 转换为一个元组 |
list(s) | 将序列 s 转换为一个列表 |
set(s) | 转换为可变集合 |
dict(d) | 创建一个字典。d 必须是一个 (key, value)元组序列。 |
frozenset(s) | 转换为不可变集合 |
chr(x) | 将一个整数转换为一个字符 |
ord(x) | 将一个字符转换为它的整数值 |
hex(x) | 将一个整数转换为一个十六进制字符串 |
oct(x) | 将一个整数转换为一个八进制字符串 |
除了这些还要知道什么是隐式转换和显式转换。
标识符是变量、函数、类、模块和其他对象的名称。
在 Python 里,标识符由字母、数字、下划线组成。
所有标识符可以包括英文、数字以及下划线(_),但不能以数字开头。
Python 中的标识符是区分大小写的。
以下划线开头的标识符是有特殊意义的。
以双下划线开头的 __foo 代表类的私有成员,不能直接从外部调用需通过类里
的其他方法调用。
以双下划线开头和结尾的 _ _ foo_ _ 代表 Python 里特殊方法专用的标识, 如 init() 代表类的构造函数。
避免使用python预定义标识符名作为自定义标识符名。
例如,NotImplemented、Ellipsis、int、float、list、str、tuple等。
标识符不能含有除_以外的任何特殊字符,如:%、#、&、逗号、空格等。
#输出python关键字
from keyword import kwlist
print(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中变量无需声明,在其中能够计算非常大的数,下图为一个例子:
a=100//3
print(a)
b=2**100
c=2**101
d=2**102
e=2**1023
print(b)
print(c)
print(d)
print(e)
#运算结果
33
1267650600228229401496703205376
2535301200456458802993406410752
5070602400912917605986812821504
89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608
a=5
b=3
a**=b
print(a)
#运算结果
125
比较运算
比较运算是指两盒数据之间的比较运算。比较运算符多用于数值型数据比较,有时也用于字符串数据比较,比较的结果时布尔值True或False
比较运算中还有is和is not可以用来判断两个标识符是否引用自一个对象,可以用=和!=联系起来记忆,这里可以回顾一下matlab中的不等于其实是~=
#等于运算符
a=5==6
print(a)
b="yes"=="yes"
#运算结果
False
True
逻辑运算(这个比较重要)
逻辑运算符包括and、or、not,分别表示逻辑与、逻辑或、逻辑非,运算结果为布尔值True或False,下标x=5,y=0
运算符 | 说明 | 实例 |
---|---|---|
or | 如果x是True,则返回x,否则返回y的计算值 | x or y,值为5 |
and | 如果x为False,x and y返回False,否则返回y的计算值 | x and y,值为0 |
not | 如果x为True,返回False。如果x为False,返回True | not x,值为False;not y,值为True |
#逻辑非 not
x = True
y = not x
print(y)
z = False
print(not z)
#运算结果
False
True
注意:
位运算符
按位运算是指把数字转换为二进制来进行计算,包括一下6种,其中假设a=60,b=13.
a=60,二进制格式为00111100
b=13,二进制格式为00001101
运算符 | 说明 | 实例 |
---|---|---|
& | 按位与:参与运算的两个值,如果相应的二进制位都为1,则该位结果为1,否则为0 | a&b=00001100,十进制为12 |
| | 按位或:参与运算的两个值,只要对应的二进制位有一个为1时,该位结果就为1, | a|b=00111101,十进制为61 |
^ | 按位异或:参与运算的两个值,当对应的二进制位不同时,该位结果为1,否则结果为0 | a^b=00110001,十进制为49 |
~ | 按位取反:这是一个单目运算符,只有一个值参与运算,运算过程是对每个二进制位取反,即把1变为0,把0变为1 | ~a的二进制结果为11000011,十进制为-61 |
<< | 左移运算符:运算数的各二进制位全部左移若干位,高位丢弃,低位补0,结果相当于运算数乘以2的n次方,正负符号不发生变化 | a<<2的二进制结果为11110000,十进制位数为240 |
>> | 右移运算符:运算数的各二进制位全部右移若干位,低位丢弃,高位补0,结果相当于运算数除以2的n次方,正负符号不发生变化 | a>>2的二进制结果为00001111,十进制位数为15 |
这里需要注意的是按位取反,很明显~a的二进制结果为11000011,那么为什么是-61呢,而不是195呢,是不是觉得和自己所理解的按位取反不太一样?有这样理解的同学肯定是没有掌握清楚计算机中的二进制表示,在计算机中,正数和负数都是以二进制补码形式表示的,这样才能被计算机识别,其中对于正数,原码=反码=补码;对于负数,原码中的最高位为1(标志位),反码对原码中非标志位的其他位进行0/1反转,补码则是在反码的基础上+1。反过来,如果要将二进制的计算结果(比如:按位取反、两数相加)展示出来,则需要将补码-1,然后再反转,即逆过程,这样计算出来的才是我们人类能理解的十进制数。
那对于上面的11000011,-1后为11000010,取反码为10111101,结果为-61,这样才是对的!,第一位是符号位,符号位在变成反码过程中不会变化的,变化的只是数值位!这个和按位取反是不一样的!
这里在举一个例子,b=-46,~46=?
b=10101110,取反后二进制结果时01010001,+1后为01010010,取反码为00101101,十进制为45。
总结:
二进制数正负性 | 结果 |
---|---|
正数a | ~a= -(a+1) |
复数b | ~b=-(b+1) |
比如-23 ,~(-23)=-((-23)+1)=22; ~89=-(89+1)=-90.
运算符的优先级
运算符 | 描述 |
---|---|
** | 指数(最高优先级) |
~、+、- | 按位翻转,一元加号和一元减号(最后两个的方法名为+@和-@) |
*、/、%、// | 乘、除、取模和整除 |
+、- | 加法、减法 |
>>、<< | 右移、左移运算符 |
& | 按位与 |
^、| | 位运算符 |
<=、<、>、>=、 | 比较运算符 |
<>(Python3舍弃,相当于!=)、==、!=、 | 等于运算符 |
=、%=、/=、//=、-=、+=、*=、**= | 赋值运算符 |
not | 逻辑非 |
and | 逻辑与 |
or | 逻辑或 |
#位运算优先级
a=2*3+4<=5+1*2
#根据优先级关系,先进性乘法运算,然后进行加法运算,接着进行比较运算
print(a)
#运算结果
False
接下来我还有另一篇文章可以查看python章节
radius=float(input("请输入半径r:"))
c=2.0*3.14*radius
s=3.14*radius*radius
print("圆的周长是:%.2f" %c)
print("圆的面积是:%.2f" %s)
这里需要注意的是input函数返回值是字符串,需要使用float函数进行类型转换。
a=float(input("请输入摄氏温度:"))
c=a*9/5+32
print("摄氏温度{}转化为华氏温度为:{}".format(a,c))
#运行结果
请输入摄氏温度:37
摄氏温度37.0转化为华氏温度为:98.6
这里注意的是.format() 函数
#二进制转十进制
print('二进制1111011转十进制',int("1111011",2))
print('二进制1111011转十进制',eval("1111011"))
#十进制转二进制
print('十进制18转二进制',bin(18))
print('十进制18转二进制',"{0:b}".format(18))
#八进制转十进制
print('八进制011转十进制',int("011",8))
print('八进制011转十进制',eval("0o011"))
#十进制转八进制
print('十进制30转八进制',oct(30))
print('十进制30转八进制',"{0:o}".format(30))
#十六进制转十进制
print('十六进制12转十进制',int("12",16))
print('十六进制12转十进制',eval("0x12"))
#十进制转十六进制
print('十进制87转十六进制',hex(87))
print('十进制87转十六进制',"{0:x}".format(87))
#运行结果
二进制1111011转十进制 123
二进制1111011转十进制 1111011
十进制18转二进制 0b10010
十进制18转二进制 10010
八进制011转十进制 9
八进制011转十进制 9
十进制30转八进制 0o36
十进制30转八进制 36
十六进制12转十进制 18
十六进制12转十进制 18
十进制87转十六进制 0x57
十进制87转十六进制 57
#计算平均分和总分
name=input("学生姓名:")
chinese=float(input("语文成绩:"))
maths=float(input("数学成绩:"))
english=float(input("英语成绩:"))
sum = chinese+maths+english
avrrage=sum/3
print("三科总成绩为:%.2f" %sum)
print("三科平均分为: %.2f" %avrrage)
#已知三角形边长,计算三角形面积和周长
import math
a=float(input("a="))
b=float(input("b="))
c=float(input("c="))
if a+b>c and a+c>b and b+c>a:
d=a+b+c
e=d/2
ss=math.sqrt(e*(e-a)*(e-b)*(e-c))
# print("三角形周长为:%.2f" %d)
print("三角形周长为:"+str(d))
print("三角形面积为:%.2f" %ss)
else:
print("不能构成三角形")
#运行结果
a=3
b=4
c=5
三角形周长为:12.0
三角形面积为:6.00