GRIT:perseverance and passion for long-term goals
一. 程序的格式框架
#温度转换.py
TemStr = input("请输入带符号的温度值:")
if TemStr[-1] in ['F', 'f']: #表示判断用户输入的最后一个字符是否是F或f
C = (eval(TemStr[0:-1])-32)/1.8
print("转换后的温度是{:.2f}C".format(C))
elif TemStr[-1] in ['C','c']:
F = 1.8*eval(TemStr[0:-1])+32
print("转换后的温度是{:.2f}F".format(F))
else:
print("输出格式错误")
(1). 缩进:一行代码开始前空白区域,表达程序的格式框架
缩进是语法的一部分,缩进不正确程序运行错误
缩进表达代码间包含和层次关系的唯一手段
缩进的长度,在程序内一致即可,一般用4个空格或1个TAB
使用换行符分隔,一般情况下,一行书写一条语句
(2). 注释:用于提高代码可读性的辅助性文字,不被执行
单行注释:以#开头,其后内容为注释
# 注释内容
多行注释:以'''开头和结尾
'''(或""")这是多行注释第一行
这是多行注释第二行'''(或""")
二. 命名与保留字
(1). 命名:关联标识符的过程
命名规则:大小写字母、数字、下划线和汉子等字符及组合
注意:大小写敏感,首字符不能是数字、不与保留字相同
每个标识符必须以字符或下划线开头
(2). 保留字:被编程语言内部定义并保留使用的标识符
Python语言有33个保留字(也叫关键字)
保留字是编程语言的基本单词,大小写敏感
三. 变量与赋值语句
(1). 变量:程序中用于保存和表示数据的占位符号
1. 定义
变量采用标识符来表示,关联标识符的过程叫命名
TemStr是变量的名字
python中变量是用来标识对象或引用对象的,变量通过变量名访问
可以使用等号=向变量赋值或修改值,=被称为赋值符号
2. 变量的数据类型
python语言是动态类型语言,即变量不需要显式声明数据类型。根据变量的赋值,python语言的解释器会自动确定其数据类型
通过内置的type()函数,可以判断一个对象指向的数据类型
# 整数类型
>>> m = 2
>>> type(m)
<class 'int'>
# 浮点数类型
>>> m = 2.6
>>> type(m)
<class 'float'>
# 字符串类型
>>> m = "你好"
>>> type(m)
<class 'str'>
# 复数类型
>>> m = 5+4j
>>> type(m)
<class 'complex'>
# 布尔类型
>>> m = False
>>> type(m)
<class 'bool'>
# 列表类型
>>> m = [1,2,3,4,5]
>>> type(m)
<class 'list'>
变量动态类型实例:计算机在内存里都做了哪些事情
执行语句m=2,解释器创建了整数对象2和变量m,并将m指向整数对象2.
接着执行m=2.6,解释器创建了实数对象2.6,并将m指向实数对象2.6
因此,m的类型取决于它所指向的数据的类型
举例:
a = "ABC"
b = a
a = "XYZ"
print(b)
# 此刻b是"ABC"
原因是:
3. 变量的运算
python是一种强类型语言,只支持该类型允许的运算操作
>>> a = 100
>>> b = "30"
>>> a + b
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
a + b
TypeError: unsupported operand type(s) for +: 'int' and 'str'
a指向整数类型对象,b指向字符串类型对象,整数类型数据和字符串类型数据不能直接相加,即字符串类型数据不能自动转换为整数类型数据
四. 数据类型:供计算机理解的数据形式
计算机程序存储和操作的信息通常被称为数据,不同类型的数据以不同的方式存储和操作
1. 基本数据类型
(1). 数字类型及操作
①. 整数(int):数学中的整数
整数类型(int)是表示整数的数据类型。
与其他程序设计语言有精度限制不同,Python语言中的整数位数可以为任意长度(只受限制于计算机内存),可正可负
4种进制表示形式
十进制
1010、99、-217
二进制
以0b或0B开头:0b010、-0B101
八进制
以0o或0O开头:0o123、-0O456
十六进制
以0x或0X开头:0x9a、-0X89
②. 浮点数(float):数学中的实数,带有小数部分
浮点类型是表示实数的数据类型
与其他程序设计语言的双精度(double)和单精度(float)对应
Python语言中的浮点类型数据的精度与系统有关
浮点数的取值范围和小数精度都存在限制,但常规计算可忽略
注:浮点数间运算存在不确定尾数,不是BUG
二进制表示小数,可以无限接近,但不完全相同
0.1+0.2 >>无限接近0.3
>>>round(0.1+0.2,1) == 0.3
True
对加法和取四合五入, 1是截取位数
>>> m = 12.
>>> n = .98
>>> k = 12e-5
>>> print(m, n, k)
m,n,k都是合法的float类型数据,k是以科学计数法表示的浮点数
结果为:
12.0 0.98 0.00012
浮点数可以用科学计数法表示
使用字母e或E作为幂的符号,以10为基数
格式如下:
<a>e<b> 表示a*10的b次幂
③. 复数类型
2. 组合数据类型
(1). 字符串类型及操作
1. 定义
由0个或多个字符组成的有序字符序列
字符串由一对单引号或一对双引号表示(这两者表达的含义相同)
字符串类型数据(str),Python语言解释器会自动创建str型对象实例
Python语言中字符串数据类型可以使用以下4中方式定义
- 单引号(’ ')
- 双引号(" ")
- 三单引号(’’’ ‘’’) :其中可以包含单引号和双引号,可以跨行
- 三双引号(""" “”") :其中可以包含单引号和双引号,可以跨行
>>> 'hello'
'hello'
>>> "hello"
'hello'
#进行嵌套输出
>>> print('''"python程序设计"
"C语言程序设计"''')
"python程序设计"
"C语言程序设计"
>>> print("""'Java程序设计'
'C语言程序设计'""")
'Java程序设计'
'C语言程序设计'
注相邻的两个字符串,中间只有空格的话,会自动拼接为一个字符串
>>> "中" "国"
'中国'
注:字符串支持转义字符
>>> print("\a")
2. 字符串的序号
字符串是字符的有序序列,可以对其中的字符进行索引(下标从0开始)
3. 字符串的使用
字符串的索引访问(单个字符访问)
>>> s = "hello pudding"
>>> s[0]
'h'
>>> s[-1]
'g'
>>> s[8]
'd'
>>> s[-2]
'n'
字符串的切片访问(字符串区间访问)
语法格式:[头下标 : 尾下标 : 步长]
步长可以省略,默认步长为1,
步长值大于0,表示从左向右取字符
步长值小于0,表示从右向左取字符
步长的绝对值减一,表示每次取字符的间隔
s[头下标 : 尾下标]
表示:在字符串s中去索引值从头下标到尾下标(不包括尾下标)的子字符串
若头下标省略,表示从字符串的开始取子串
若尾下标省略,表示取到字符串的最后一个字符
若头下标和尾下标都省略,表示取整个字符串
>>> s = "Hello Mike"
>>> s[0:5]
'Hello'
>>> s[6:-1]
'Mik'
>>> s[:5]
'Hello'
>>> s[6:]
'Mike'
>>> s[:]
'Hello Mike'
s[头下标 : 尾下标 : 步长]
>>> s = "Hello Mike"
>>> s[0:5:1]
'Hello'
#正向取,中间间隔一个字符
>>> s[0:6:2]
'Hlo'
#反向取,但是头下标小于尾下标,无法取到字符,输出为空
>>> s[0:6:-1]
''
#反向取,尾下标的字符无法取到
>>> s[4:0:-1]
'olle'
#逆序输出字符串
>>> s[4::-1]
'olleH'
>>> s[::-1]
'ekiM olleH'
>>> s[::-3]
'eMlH'
注:正向取字符串时,头下标要小于尾下标
反向取字符串时,头下标要大于尾下标
一般尾下标是取不到的
想要逆序输出字符串,只需要写s[::-1]即可
转义符\
转义符表达特定字符的本意
例如:
>>>"这里有个双引号(\")"
结果为:这里有个双引号(")
转义符形成一些组合,表达一些不可打印的含义
"\b"回退
"\n"换行(光标移动到下行首部)
"\r"回车(光标移动到本行首部)
4. 字符串处理与操作
内置字符串运算符
内置字符串处理函数
Python字符串的编码形式:Unicode
因为ASCII编码是针对英语字符设计的,没有覆盖其他语言存在的跟广泛字符
所以现代计算机系统正向一个更大的编码标准Unicode转移
Unicode统一字符编码,覆盖了几乎所有的字符的编码
从0到1114111(0x10FFFF)空间,每个编码对应一个字符
>>> x = "好好学习,天天向上"
>>> len(x)
9
>>> str(125)
'125'
>>> hex(62)
'0x3e'
>>> oct(62)
'0o76'
>>> print(ord('A'),ord('B'),ord('C'))
65 66 67
>>> print(ord('/'),ord('+'), ord(' '))
47 43 32
>>> print(chr(100), chr(101))
d e
输出12星座对应字符:
for i in range(12):
print(chr(9800 + i), end=" ")
结果为:♈ ♉ ♊ ♋ ♌ ♍ ♎ ♏ ♐ ♑ ♒ ♓
内置字符串处理方法
python语言对字符串对象提供了大量的内置方法用于字符串的检测、替换、排版等操作,使用时需要注意的是,字符串对象是不可变的,所以字符串对象提供的涉及字符串“修改”的方法都是返回修改之后的新字符串,并不对原字符串做任何修改
方法在编程中是一个专有名词
- 方法特指a.b()风格中的函数b()
- 方法本身也是函数,但与a有关,a.b()风格使用
- 字符串及变量也是对象a,存在一些可用方法
(2). 序列类型及操作
(3). 字典类型及操作
(4). 集合类型及操作
五. 内置的数值操作
Python语言中,数据的类型决定了数据可以实现的操作。
Python语言中内置的数值运算操作符和函数支持对数值进行一般数学运算
所谓内置的数值运算操作符合函数是指不需要引用标准库或第三方函数库,
而由Python语言解释器直接提供的数值运算操作符和函数
(1). 内置的数值运算操作符
1. 算术运算符
操作符 | 描述 | 实例 | 结果 | 备注 |
---|---|---|---|---|
+ | 加法 | 3+4.5 | 7.5 | |
- | 减法 | 12-4.8 | 7.2 | |
* | 乘法 | 2*5.0 | 10.0 | |
/ | 实数除法 | 10/4 | 2.5 | |
// | 整数除法 | 10//4 | 2 | 采用向下取整方式,-10//4=-3 |
% | 取余 | 10%3 | 1 | 操作数可以为实数,3.5%3=0.5 |
** | 幂运算 | 2**3 | 8 | 操作数可以为实数,4.0**0.5=2.0 |
2. 赋值运算符
注:所有的二元运算操作符(+、-、、/、//、%、**)都可以和赋值运算符结合在一起,形成复合赋值运算符(+=、-=、=、/=、//=、%=、**=)
3. 比较运算符
比较运算符,也称关系运算符,用于对常量、变量或表达式的结果进行大小比较。如果这种比较是成立的,则返回 True(真),反之则返回 False(假)。
比较运算符 | 说明 |
---|---|
> | 大于,如果>前面的值大于后面的值,则返回 True,否则返回 False。 |
< | 小于,如果<前面的值小于后面的值,则返回 True,否则返回 False。 |
== | 等于,如果==两边的值相等,则返回 True,否则返回 False。 |
>= | 大于等于(等价于数学中的 ≥),如果>=前面的值大于或者等于后面的值,则返回 True,否则返回 False。 |
<= | 小于等于(等价于数学中的 ≤),如果<=前面的值小于或者等于后面的值,则返回 True,否则返回 False。 |
!= | 不等于(等价于数学中的 ≠),如果!=两边的值不相等,则返回 True,否则返回 False。 |
is | 判断两个变量所引用的对象是否相同,如果相同则返回 True,否则返回 False。 |
is not | 判断两个变量所引用的对象是否不相同,如果不相同则返回 True,否则返回 False。 |
print("89是否大于100:", 89 > 100)
print("24*5是否大于等于76:", 24*5 >= 76)
print("86.5是否等于86.5:", 86.5 == 86.5)
print("34是否等于34.0:", 34 == 34.0)
print("False是否小于True:", False < True)
print("True是否等于True:", True < True)
4. 逻辑运算符
Python 中的逻辑运算符包括如下三种:
and:逻辑与
or:逻辑或
not:逻辑非(取反)
5. 位运算符
Python 中的位运算符包括如下六种:
&:按位与
|:按位或
^:按位异或
~:按位取反
<<:左移动
>>:右移动
# 定义位运算处理函数bit, 其中bitone和bittwo两个参数为需要进行位运算的变量,由测试程序读入。
def bit(bitone,bittwo):
# 请在此处填入将bitone,bittwo按位与的代码,并将运算结果存入result变量
result = bitone & bittwo
print(result)
# 请在此处填入将bitone,bittwo按位或的代码,并将运算结果存入result变量
result = bitone | bittwo
print(result)
# 请在此处填入将bitone,bittwo按位异或的代码,并将运算结果存入result变量
result = bitone^bittwo
print(result)
# 请在此处填入将bitone按位取反的代码,并将运算结果存入result变量
result = ~bitone
print(result)
# 请在此处填入将bittwo左移动两位的代码,并将运算结果存入result变量
result = bittwo<<2
print(result)
# 请在此处填入将bittwo右移动两位的代码,并将运算结果存入result变量
result = bittwo >>2
print(result)
6. 成员运算符
Python 的成员运算符有以下两种:
in 若x在y序列中,则返回true,若不在则返回false
not in 如果x不在y序列中,则返回True,否则返回false
7. 身份运算符
Python 的身份运算符有以下两种:
is 运算符is表示判断两个标识符的存储单元是否相同。若相同,则返回true,否则返回false
is not 运算符is not表示判断两个标识符的存储单元是否不相同。若不相同,则返回true,否则返回false
8. 关系运算符
运算符 | 描述 |
---|---|
== | 等于 |
!= | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
注:关系运算符可以连用
使用关系运算符的前提是操作符之间必须可以比较大小
a, b = 10, 50
0 < a < b 表示a>0 并且 a<b结果为True
"ABC">"ab" 表示字符串按对应字符的Unicode编码比较,结果为False
9. 运算符优先级
类别 | 类型名 |
---|---|
** | 指数(最高优先级) |
~ + - | 按位翻转,一元加号和减号(最后两个的方法名为 +@ 和 -@) |
* / % // | 乘,除,取模和取整除 |
+ - | 加法,减法 |
>> << | 右移,左移运算符 |
& | 位 (AND ) |
^ | 位运算符 |
<= < > >= | 比较运算符 |
<> == != | 等于运算符 |
= % = /= //= -= += *= **= | 赋值运算符 |
is is not | 身份运算符 |
in not in | 成员运算符 |
not or and | 逻辑运算符 |
(2). 内置的数值运算函数
函数及使用 | 描述 |
---|---|
abs(x) | 求x的绝对值 |
divmod(x,y) | 商余,输出(x//y, x%y) |
pow(x, y[, z]) | 幂余,(x**y)%z,[…]表示参数z可省略,当z省略的时候,等价于x的y次幂 |
round(x[, d]) | 四舍五入,d是保留小数位数,默认值为0 |
max(x1,x2, … ,xn) | 求最大值,返回x1,x2, … ,xn中的最大值 |
min(x1,x2, … ,xn) | 求最小值,返回x1,x2, … ,xn中的最小值 |
int(x) | 将x变成整数,舍弃小数部分 |
float(x) | 将x变成浮点数,增加小数部分 |
complex(x) | 将x变成复数,增加虚数部分 |
>>> -10//4
-3
>>> abs(-2)
2
>>> divmod(28, 12)
(2, 4)
>>> round(3.1415, 2)
3.14
>>> pow(2, 3)
8
>>> max(2,5,0,-4)
5
>>> min(2,5,0,-4)
-4
>>> int(123.45)
123
>>> float(12)
12.0
>>> complex(4)
(4+0j)
(3). 类型转换
1. 类型自动转换
int和float对象可以混合运算,如果表达式中包含float对象,则int对象会自动转换成float对象,结果为float对象
例如:123 + 4.0 = 127.0 (整数+浮点数 = 浮点数)
在混合运算中,布尔类型(bool)中的True会自动转换为1,False会自动转换成0参与运算
>>> 56+True
57
>>> 44+False
44
类型间可以进行混合运算,生成结果为最宽的类型
三种类型存在一直逐渐扩展的关系
整数->浮点数->复数
注:数值型数据和字符串无法进行运算
>>> 56+'4'
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
56+'4'
TypeError: unsupported operand type(s) for +: 'int' and 'str'
>>> 56+"2"
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
56+"2"
TypeError: unsupported operand type(s) for +: 'int' and 'str'
2. 类型强制转换
强制转换类型 | 含义 |
---|---|
int(x) | 将x变成整数,舍弃小数部分 |
float(x) | 将x变成浮点数,增加小数部分 |
complex(x) | 将x变成复数,增加虚数部分 |
在使用input()函数输入数据的时候,可以使用int和float将字符数据转换成需要的类型
>>> r = float(input("输入圆的半径:"))
输入圆的半径:3.4
>>> year = int(input("输入年份:"))
输入年份:2020
六. 语句与函数
(1). 赋值语句:由赋值符号构成的一行代码
赋值语句用来给变量赋予新的数据值
赋值语句右侧的数据类型同时作用于变量
例:TemStr=input(" ")
其中input返回一个字符串类型,TemStr也是字符串
语法格式:
变量 = 表达式
要访问python的变量之前,必须先绑定某个对象,也就是先赋值,否则会报错
1. 链式赋值语句
链式赋值用于为多个变量同时赋予相同的值
x = y = z = 200
# 等价于x=200,y=200, z=200三条语句
2. 解包赋值语句
Python语言支持将序列数据类型解包为对应相同个数的变量
a, b = 100, 200
print(a, b)
# 结果为:100, 200
变量的个数必须与序列的元素个数一致,否则会产生错误
举例:利用解包赋值语句实现两个变量值的交换
>>> a = 100
>>> b = 200
>>> a, b = b, a
>>> print("a=", a, " b=", b)
a= 200 b= 100
七. Python程序的输入输出
(1). 输入函数input()
-
定义
从控制台获得用户输入的函数 -
input()函数的使用格式:
变量 = input(“提示信息字符串”)用户输入的信息以字符串类型保存在<变量>中
-
运行流程
input()括号内的提示字符串用于提示用户该输入什么样的数据
当Python程序运行到input()函数时,将在屏幕上显示"提示字符串",然后Python程序将暂停并等待用户输入一些文本,输入结束后按Enter键,用户输入的任何内容都会以字符串形式存储 -
想要通过input()函数得到数字
语法格式:
变量 = eval(input(“提示字符串”))
(2). 输出函数print()
1. 定义
以字符形式向控制台输出结果的函数
所有提供的表达式都从左往右求值,结果值也是以从左往右的方式显示在输出行上
2. print()函数的基本使用格式:
print(<拟输出字符串或字符串变量>)
print(1,2,3 sep='-') #使用-分隔多项输出
1-2-3
for i in range(1,4)
print(i, end='') #输出之后不换行
123
3. print()函数的格式化
例子:print("转换后的温度是{:.2f}C".format(C))
{ }表示槽,后续变量填充到槽中
{:.2f}表示将变量C填充到这个位置时取小数点后2位
format()格式化方法
从Python2.6开始,新增了一种格式化字符串的方法,str.format(),它增强了字符串格式化的功能,通过{}和:来代替之前的%。
format()方法可以有多个输出项,位置可以按指定顺序设置
格式:"…{ }, …{ }".format(…, …) [字符串.format( )]
字符串中包含了一系列大括号{},称为槽,
通过槽来格式化输出format()方法中不同的值,默认是按照值的顺序在相应的槽中显示
#不指定位置顺序,按默认顺序
>>> "我是{}班{}号的学生{}".format("计科182", 12, "pudding")
'我是计科182班12号的学生pudding'
#按指定顺序,序号从0开始
>>> "我是{1}班{2}号的学生{0}".format("pudding", "计科182", 12)
'我是计科182班12号的学生pudding'
槽内部的语法格式:
{序号:格式控制标记}.format()
宽度20,居中对齐,*填充
>>> "{:*^20}".format("Mike")
'********Mike********'
宽度20,左对齐,=填充
>>> "{:=<20}".format("Mike")
'Mike================'
保留2位小数
>>> "{:.2f}".format(3.1415926)
'3.14'
宽度30,居中对齐,=填充,保留4位小数
>>> "{:=^30.4f}".format(3.1415926)
'============3.1416============'
宽度5,右对齐,空格填充,整数形式输出
>>> "{:5d}".format(24)
' 24'
宽度5,右对齐,x填充,整数形式输出
>>> "{:x>5d}".format(24)
'xxx24'
4. 类似于 C/C++ 的printf,Python 的print也能实现格式化输出,方法是使用%操作符,它会将左边的字符串当做格式字符串,将右边的参数代入格式字符串:
print("100 + 200 = %d" % 300) #左边的%d被替换成右边的300
print("A的小写是%s" % "a") #左边的%s被替换成右边的a
得到的结果是:
100 + 200 = 300
A的小写是a
如果要带入多个参数,则需要用()包裹代入的多个参数,参数与参数之间用逗号隔开,参数的顺序应该对应格式字符串中的顺序:
print("%d + %d = %d" % (100,200,300))
print("%s %s" % ("world","hello"))
得到的结果是:
100 + 200 = 300
world hello
5. print()函数注意事项
print()函数会在显示值之间放置一个空格字符
>>> print(3,5)
3 5
# 整数3和5,中间默认位置放置一个空格
>>> print("3+5 =",3+5)
3+5 = 8
# 默认输出一个空格
默认情况下,print()函数输出完所有的提供的表达式之后,会自动换行
print(3)
print(4)
结果:
3
4
如果希望print()函数输出完数据后不换行则可以采用如下形式
print("the answer is ", end="") 使用空来替换换行符
print(3+4)
结果:the answer is 7
print("the answer is ", end="#") 使用#来替代换行符
print(3+4)
结果:the answer is #7
(3). 评估函数eval()
-
定义
去掉参数最外侧引号并执行余下语句的函数 -
eval()函数的基本使用格式:
eval(<字符串或字符串变量>)例子:eval("1+2") 3 eval('"1+2"') '1+2' eval('print("Hello")') Hello