Python基础语法
标识符和变量
标识符
- 标识符是指用来标识某个实体的一个符号,在不同的应用环境下有不同的含义。
- 标识符由字母、下划线和数字组成,且不能以数字开头。
正确的:
- x1
- my_ test
- _123
错误的:
- Test!2 (包含了其他字符)
- class (这个属于关键字)
- 1x (数字开头)
- 标识符区分大小写
Andy和andy 是两个不同的标识符
Python关键字
python一些特殊的组合,是所谓的关键字。键字不允许作为标识符。
Python关键字 | |||
---|---|---|---|
False | def | if | raise |
None | del | import | return |
True | elif | in | try |
and | else | is | while |
as | except | lambda | with |
assert | finally | nonlocal | yield |
break | for | not | |
class | from | or | |
continue | global | pass |
常量和变量
- 常量就是不能改变的量
比如3.14159就是一个常量 - 变量就是值可以改变的量,变量名则是程序为了方便地弓|用内存中的值而为它取的名称。
- Python变量名是大小写敏感的
- Python为动态类型语言,不需要提前声明自定义变量类型,与C不同。
- 可使用 type() 函数查看变量类型
- 关键字不能做完变量名使用,内置函数名也不可作为变量名使用。
- 若使用了内置函数做变量名之后,会导致该函数不可用。需使用 del() 回收这个变量之后才可使用。
id函数
- Python变量有一个非常重要的性质,就是变量是将名字和对象进行关联。
- 赋值操作并不会实际复制值,它只是为数据对象取个相关的名字。
- id( )是Python的内置函数,可以显示对象的地址
- python解释器会把小整数即 [-5,257] 存放到小整数对象池当中,故不需要对这些对象进行重新分配,达到高效率。
- 所以如下图所示,当a,b都为1时,其a,b,1的id都相同。但为1000时都不同
以下为IDLE的工作结果
>>>a=1
>>>b=1
>>>id(a)
1991296688
>>>id(b)
1991296688
>>>id(1)
1991296688
>>>a=1000
>>>b=1000
>>>id(a)
2802231369968
>>>id(b)
2802231369904
>>>id(1000)
2802231370032
>>>
输入和输出函数
- 输入函数input()
- input函数在python中是一个内建函数,可以实现从标准输入(键盘)中读入一个字符串。
- 提示语:a=inpuut(“提示语”)
- 输入整数例: a=int(input())
- 输入多个值:a,b=input().split()
- 输出函数print()
- print(“输出值”)
输出两个变量a,b:print(a,b)
数据类型
整型(int)
- 整数(int) 与数学中整数概念一致,无限制不同于C
- 整数可正可负
- 默认情况下,整数采用十进制。
- 其它进制需要增加相应的引导符号
前导符
进制 | 前导符 | 示例 | 十进制 |
---|---|---|---|
二进制: | b或0B | 0b10 | 2 |
八进制: | 0o或0O | 0o10 | 8 |
十六进制: | 0x或0X | 0x10 | 16 |
浮点数(float)
- 与数学中的实数概念一致
- 取值范围与精度都有限制
- 表示方式:
小数: 1.23, 3.14,-9.01
科学计数法: 1.23x109、1.23e9、0.000012、1.2e-5 - 浮点数运算存在不确定尾数,有误差
>>>0.1+0.2 == 0.3
>False
>>>0.1+0.2
>0.30000000000000004
>>>round(0.1+0.2,2) == 0.3
>True
>>>
复数(complex)
python特色
- 与数学中的复数概念一致
- 由实部和虚部组成,虚部用j表示
- 例如:
2 + 3j
实部 虚部
real方法取实部
imag方法取虚部
complex()函数可用于创建一个值为real+imag*j的复数。
>>>a = complex(1,2)
>>>a
>(1+2j)
>>>
运算符
算数运算符
运算符 | 说明 | 示例 | 运算结果 |
---|---|---|---|
+ | 加法 | 5+10 | 15 |
- | 减法 | 100-5 | 95 |
* | 乘法 | 8*9 | 72 |
/ | 浮点数除法 | 100/5 | 20.0 |
/ | 整数除法 | 100//5 | 20 |
% | 模(取余) | 9%4 | 1 |
** | 幂 | 2**3 | 8 |
取整为向左取整(取小)
>>>3/2
>1.5
>>>3//2
>1
>>>-3//2
>-2
>>>
模运算
通常模运算只支持整数进行,但python对浮点数也可进行模运算
>>>3%2
>1
>>>3.2%1.5
>0.20000000000000018
>>>
求幂运算
>>>2**3
>8
数学库
函数或常数 | 功能 |
---|---|
e | 自然常数 |
pi | 圆周率 |
log(x[,base]) | 返回以base为底的对数,缺省为e |
pow(x,y) | 返回x的y次方 |
sqrt(x) | 返回x的平方根 |
fabs(x) | 返回x的绝对值 |
使用数学库前需要先导入库
import math
a = math.e
b = math.log(2,3)
c = math.pow(4,5)
d = math.sqrt(6)
e = math.fabs(7)
print(a,b,c,d,e)
#输出结果如下:
2.718281828459045 0.6309297535714574 1024.0 2.449489742783178 7.0
字符串
- 字符串是以引号括起来的任意文本.
- 是一个有序序列.
- 表示形式:
单引号:‘abc’
双引号:”hello"
三引号:’’‘hello
world’’’ - 三引号可以表示多行文本,若字符串本身包含单引号,则用双引号括单引号;同理三引号括双引号。
转义字符
转义字符 | 含义 |
---|---|
\ | 反斜杠符号 |
’ | 单引号 |
" | 双引号 |
\a | 响铃 |
\b | 退格(Backspase) |
\n | 换行 |
\v | 纵向制表符 |
\t | 横向制表符 |
\r | 回车 |
\f | 换页 |
\ooo | 最多三位 八进制,例如:、12代表换行 |
\xyy | 十六进制数,yy代表的字符,例如\x0a代表换行 |
字符串运算符
运算符 | 功能 |
---|---|
+ | 连接字符串 |
* | 复制字符串 |
示例:
>>>'hello'+'world'
'helloword'
>>>'ab'*3
'ababab'
注:字符串不能和整形或其他的数值相加,否则会报错。
字符串切片
- 字符串是一个有序序列,可以是正向递增也可以是反向递减:
1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|
a | b | c | d | e | f | g |
-8 | -7 | -6 | -5 | -4 | -3 | -2 |
- 索引:在[ ]中给出序号
- 切片:在[ ]中给出切片序号范围
示例
>>> s ="abcdefg"
>>>s[0] #切片
>'a'
>>>s[-1]
>'h'
>>>s[1:5]
>'bcde'
关系运算
运算符 | 表达式 | 含义 | 实例 | 结果 |
---|---|---|---|---|
== | x==y | x等于y | ”ABCD“==”ABCDEF“ | False |
!= | x!=y | x不等于y | “ABC”!=“abcd” | True |
> | x>y | x大于y | ”ABC“>“ABD” | False |
>= | x>=y | x大于等于y | 123>=23 | True |
< | x<y | x小于y | “ABC”<“DEF” | True |
<= | x<=y | x小于等于y | “123”<=“23” | True |
字符串大小比较由第一位开始比较
>>>1<3<5 #等价于1<3 and 3<5
>True
>>>3<5>2
>True
>>>1>6<8
>False
>>> import math #sqrt是math 模块下的函数,导入math模块
>>> 1>6<math.sqrt(9)
>False
>>>'Hello'>'world' #ascii('H')=72<ascii('w')=119
>False
>>>'Hello'>3
TypeError: unorderable types: str()>int()
逻辑运算
and运算:
逻辑量1 | 逻辑量2 | 结果 |
---|---|---|
False | False | False |
False | True | False |
True | Fales | False |
True | True | True |
or运算:
逻辑量1 | 逻辑量2 | 结果 |
---|---|---|
False | False | False |
False | True | True |
True | Fales | True |
True | True | True |
not运算:
逻辑量 | 结果 |
---|---|
False | True |
True | False |
逻辑运算符实例
>>> 3>5 and a>3 #注意此时没有定义变量a
>False
>>> 3>5 or a>3 #3>5的值为False,所以需要计算后面的表达式
NameError:name'a'is not defined
>>> 3<5 or a>3 #3<5的值为True,不需要计算后面的表达式
>Ture
>>> 3 and 5 #最后一个计算的表达式的值作为整个表达式的值
>5
>>>3 and 5>2
>True
>>> not 3
>False
>>> not 0
>True
注:短路原则,当3>5为False的情况下,计算机不会去计算 a>3,故and运算为False。但做or运算,两者都需要运算,故产生错误”a未定义“。非0值都作为True计算,0作为False运算。
运算符的优先级和结合性
优先级 | 运算符 | 描述 | 结合性 |
---|---|---|---|
1 | +x,-x | 正负 | |
2 | x**y | 幂 | 从左向右 |
3 | x*y,x/y,x%y | 乘,除,取模 | 从左向右 |
4 | x+y,x-y | 加,减 | 从左向右 |
5 | x<y,x<=y,x==y,x!=y,x>=y,x>y | 比较 | 从左向右 |
6 | not x | 逻辑否 | 从左向右 |
7 | x and y | 逻辑与 | 从左向右 |
8 | x or y | 逻辑或 | 从左向右 |
优先级和结合性实例
优先级一致时,看结合性
>>>3+5*4 #先乘后加
>23
>>>5*3/2 #从左向右
>7.5
>>>2**3**2 #从右向左
>512
>>>3<5 or a>3 #从左向右
>True
内置转换函数
函数名 | 含义 |
---|---|
bool() | 根据传入的参数的逻辑值创建一个新的布尔值 |
int() | 根据传入的参数创建一-个新的整数 |
float() | 根据传入的参数创建一一个新的浮点数 |
complex() | 根据传入参数创建一个新的复数 |
str() | 创建一一个字符串 |
ord() | 返回Unicode字符对应的整数 |
chr() | 返回整数所对应的Unicode字符 |
bin() | 将整数转换成2进制字符串 |
oct() | 将整数转化成8进制数字符串 |
hex() | 将整数转换成16进制字符串 |
list() | 根据传入的参数创建一一个新的列表 |
>>>bool('str')
>True
>>>float(3)
>3.0
>>>complex(1,2) #传入数值创建复数
>(1+2j)
>>>str(123)
>'123'
>>>list('abcd') #传入字符串,创建列表
>['a','b','c','d']
类型转换函数实例
#基本格式: int(x[,base= 10])
>>>int() #不传入参数时,得到结果0。
>0
>>>int("02") #去掉0
>2
>>>int(" 35 ") #去掉空格
>35
>>>int("35",8) #八进制
>29
ord函数和chr函数
>>>ord('a') #ASCII码值
>97
>>>ord('中') #汉字‘中’的Unicode码
>20013
>>>chr(97) #参数类型为整形
>'a'
bin函数,oct函数,hex函数
>>>bin(3) #0b为默认
>'0b11' #二进制
>>>oct(10)
>'0o12' #八进制
>>> hex(15)
>'0xf' #十六进制
语句
赋值语句
- 基本形式是”变量=值“的形式
- 例:基本赋值语句
>>>x = 1
>>>y = 2 #常量给变量
>>>k = x+y #表达式给变量
>>>print(k)
>3
>>>x,y = 4,8 #序列赋值
>>>x
>4
>>>y
>8
>>>x,y="ab"
>>>x
>'a'
>>>y
>'b'
#交换变量,不同于C语言
>>>a=4
>>>b=8
>>>a,b=b,a
>>>a
>8
>>>b
>4
>>>i,j=[1,2,3]
Traceback (most recent call last) :
File”<pyshell#15>" , line 1,in <module>
i, j=[1,2,3]
ValueError: too many values to unpack (expected 2)
>>>i,*j=[1,2,3]
>>>i
>1
>>>j
>[2,3]
#python支持多变量的赋值
>>>a=b=c=5
>>>print(a,b,c)
>5 5 5
>>>b=b+6
>>>print(a,b,c)
>5 11 5
if语句(分支语句)
if 逻辑表达式:
语句块1
else:
语句块2
#判断奇偶性
x=int(input())
if x%2 ==0:
print("这是一个偶数")
else:
print("这是一个奇数")
例:为鼓励居民节约用水,自来水公司采取按用水量阶梯式计价的办法,居民应交水费y (元)与月用水量x (吨)相关:当x不超过15吨时,y=4x/3;超过后,y=2.5x-17.5,小数 部分保留2位。请编写程序实现水费的计算。
x = float(input())
if x <= 15:
y = 4*x/3
else:
y=2.5*x-17.5
print(round(y,2)) #保留两位小数
for语句(循环语句)
for variable in 列表:
语句块
range函数
产生特定区间的自然数数列
range(start, stop, step)。
start:计数从start开始。默认是从0开始。
例如 range(5)等价于range(0,5)
stop:计数到stop结束,但不包括stop.
例如: list(range(0,5))是[0,1,2,3,4]没有5
step:步长,默认为1。
例如: range(0,5)等价于range(0, 5, 1)
#实例
>>>list(range(10))
>[0,1,2,3,4,5,6,7,8,9]
>>>list(range(1,10))
>[1,2,3,4,5,6,7,8,9]
>>>list(range(1,10,4))
>[1,5,9]
>>>list(range(0,-10,-1))
>[0,-1,-2,-3,-4,-5,-6,-7,-8,-9]
#例:输入n (n>=10) ,求1+2+...+n之和。
n = int(input())
result=sum(list(range(1,n+1,1)))
print(result)
#例:输入n (n>=5)求n!
n = int(input())
factor = list(range(1,n+1))
f=1
for i in factor:
f = f*i
print(f)
推导式
- 列表推导式
- 字典推导式
- 集合推导式
列表推导式
列表
列表是python最常用数据类型之一:
- 由零个或多个元素组成,元素之间用逗号分开,
- 整个列表被方括号所包裹
- 元素类型可以相同也可以不同
- 通过序号可以引用列表中的元素
- 支持加法、乘法、比较、索引、切片操作等等
#加法
>>>[1,2,3]+['c','java','python']
>[1, 2, 3, 'c', 'java', 'python']
#乘法
>>>[1]*10
>[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
#比较
>>>[1,2,3]<[2,3,4]
>True
#索引
>>>empty_list=[] #空列表
>>>weekdays=['Monday','Tuesday','Wednesday','Thursday','Friday']
>>>weekdays[2]
>'Wednesday'
列表推导式
- 列表推导式(又称列表解析式)提供了一种简明扼要的方法来创建列表。
- 它可以将循环和条件判断结合,从而避免语法冗长的代码,同时提高程序性能。
- 基本格式:
[ expression for item in iterable ]
>>>n1 = [2*number for number in[1,2,3,4,5]]
>>>n1
>[2, 4, 6, 8, 10]
带条件的列表解析
[expression for item in iterable if condition]
#无条件
>>> n1=[number for number in range(1,8)]
>>> n1
>[1, 2, 3, 4, 5, 6, 7]
#带条件
>>> n1=[number for number in range(1,8) if number % 2 == 1]
>>> n1
>[1, 3, 5, 7]
#实例1:求1+1/2+...+1/20之和
a=sum([1/i for i in range(1,21)])
print(a)
#实例2:求1-1/2+1/3-1/+...之前n项和(n>=10)
n=int(input())
a=sum([1/i if i%2==1 else -1/i for i in range(1,n+1)])
print(a)
#实例3:求6+66+666+... +666.. .666
n=int(input())
print(sum([int('6'*i) for i in range(1,n+1)]))
#字符串法
>>>[int('6'*i) for i in range(1,10)]
>[6, 66, 666, 6666, 66666, 666666, 6666666, 66666666, 666666666]
n=int(input())
print(sum([int('6'*i) for i in range(1,n+1)]))
格式化输出
format()函数
基本格式:str.format()
>>>x=3.14159
>>>y=2*x*3
>>>print("{0:.2f} {1:.2f}".format(x,y))
>3.14 18.85
# 0和1表示format函数中的第一和第二 个参数
# .2f表示小数部分保留两位,四舍五入
例题1:输入2个正整数lower和upper (lower<upper<100),输出一张取值范围为[lower, upper]且每次增加2华氏度的 华氏摄氏温度转换表,结果小数部分保留一位。温度转换的计算公式:
C=5X(F-32)/9
其中: C表示摄氏温度,F表示华氏温度。
lower,upper = input().split()
lower,upper = int(lower),int(upper)
for i in range(lower,upper+1,2):
print(i,"{:.1f}".format(5*(i-32)/9))
例题2:课后题:求交错序列前N项和
输入正整数N,输出序列和,结果保留三位小数
1-2/3+3/5-4/7+5/9-6/11+…前N项
#不采用列表推导式
n = int(input())
result = 0
for i in range(1,n+1):
if i%2==1:
result = result + i/(2*i-1)
else:
result = result - i/(2*i-1)
print("{0:.3f}".format(result))
#列表推导式如下
n = int(input())
alist = [i/(2*i-1) if i%2==1 else -i/(2*i-1) for i in range(1,n+1)]
result = sum(alist)
print("{:.3f}".format(result))
故 使用列表推导式可以大幅减代码行数