Python基础语法和基本数据
标识符号
- 第一个字符必须是字母表中字母或下划线 _ 。
- 标识符的其他的部分由字母、数字和下划线组成。
- 标识符对大小写敏感。
Python保留字
保留字即关键字,我们不能把它们用作任何标识符名称。$Python$ 的标准库提供了一个 $keyword$ 模块。
import keyword
print(keyword.kwlist)
注释
$python$中单行注释以 # 开头
多行注释可以用多个 # 号,还有 ‘’’ 和 **”””**:
Python多行语句
$Python$ 通常是一行写完一条语句,但如果语句很长,我们可以使用反斜杠 ** 来实现多行语句,例如:
total = item_one + \
item_two + \
item_three
数字
用 **
运算符来计算乘方
print(5 ** 2)
#25
在交互模式下,可以用变量 _
表示上一次的值
字符串
$Python$中单引号 ‘ 和双引号 “ 使用完全相同。
使用三引号(‘’’ 或 “””)可以指定一个多行字符串。
按字面意义级联字符串,如 “this “ “is “ “string” 会被自动转换为 this is string。
字符串可以用 + 运算符连接在一起,用 ***** 运算符重复。
$Python$ 中的字符串有两种索引方式,从左往右以 0 开始,从右往左以 -1 开始。
$Python$ 中的字符串不能改变。
$Python$ 没有单独的字符类型,一个字符就是长度为 1 的字符串。
字符串的截取的语法格式如下:变量[头下标:尾下标:步长]
转义
$Python$中单引号 '
和双引号 "
使用完全相同。
反斜杠 \
可以用来转义,或者如果我们想要使用单引号我们外面可以加一个双引号
print('this is test1')
print('this is \' test2')
print("this is test '3 ")
this is test1
this is ' test2
this is test '3
注意如果我们不需要使用到转义的话我们可以在字符串前面加一个r
print('\hahah\tese')
print(r'\hahah\tese')
\hahah ese
\hahah\tese
跨行连续输入
使用三引号"""
或 '''
可以指定一个多行字符串。
连接字符串
字符串可以用 + 运算符连接在一起,用 ***** 运算符重复
print(3 * 'ha' + 'uhuh')
hahahauhuh
或者说可以按照字面意思连接字符串,比如相邻多个字符串会自动连接到一起
print('114514''1919810')
1145141919810
因此我们在输出较长字符串的时候我们可以使用按照字面意思连接的方法来输出
字符串只读
$python$中的字符串不能被修改,如果我们需要强行修改的话会错掉
test = "testword"
test[3] = 'i'
Traceback (most recent call last):
File "e:\Sublime Text\code\codeforces\traing\test.py", line 2, in <module>
test[3] = 'i'
TypeError: 'str' object does not support item assignment
如果需要一个新的字符串我们只能通过新建的方式来,同时我们可以使用$len$来获取字符串的长度
字符串属性
文本序列类型 --- str
字符串是一种 *序列类型* ,因此也支持序列类型的各种操作。
字符串的方法
字符串支持许多变换和查找的方法。
格式化字符串字面值
内嵌表达式的字符串字面值。
格式字符串语法
使用 "str.format()" 进行字符串格式化。
printf 风格的字符串格式化
这里详述了使用 "%" 运算符进行字符串格式化。
字符串索引
索引
字符串是可以被索引 (下标) 访问的,字符串的第一个字母的索引是 $0$
test = "testword"
print(test[0])
print(test[2])
t
s
负索引
索引使用负数的话说明是从右边往左边开始数,因为我们考虑到0的负数还是本身所以我们从 $-1$开始数
test = "testword"
print(test[-1])
print(test[-3])
d
o
切片
索引可以获得单个字符,切片可以获得一个字符串的字串,切片的形式是$[l:r]$,对于切片来说$l$是被包含在输出的字符串当中但是$r$不会
切片的索引有默认值;省略开始索引时默认为0,省略结束索引时默认为到字符 串的结束:
test = "testword"
print(test[0:2])
print(test[2:5])
print(test[:2] + test[2:])
print(test[:3])
print(test[-3:])
te
stw
testword
tes
ord
我们可以发现一个性质就是对于一个字符串来说$s[:i] + s[i:] = s$
索引越界
在我们使用过大的索引的时候会出现以下的错误:
test = "testword"
print(test[114514])
Traceback (most recent call last):
File "e:\Sublime Text\code\codeforces\traing\test.py", line 2, in <module>
print(test[114514])
IndexError: string index out of range
但是对于切片中的越界索引他会自动去取到相对应的边界
test = "testword"
print(test[2:114514])
print(test[114514:])
stword
List(列表)
列表是写在[]
之间用有道分隔开的元素列表,和字符串一样列表也可以被索引和截取,列表被截取后返回一个包含所需元素的新列表,注意列表中的元素类型可以不相同
我们可以通过和字符串类似的写法$[a:b:c]$来表示从坐标$a$开始到坐标$b - 1$每次相间隔$c$去一个列表中的元素,特别需要注意的是,当$c < 0$的时候,截取字符是从后往前的,那么我们可以采用如下的写法来进行对一个列表逆序
def reverseWords(input):
# 通过空格将字符串分隔符,把各个单词分隔为列表
inputWords = input.split(" ")
# 翻转字符串
# 假设列表 list = [1,2,3,4],
# list[0]=1, list[1]=2 ,而 -1 表示最后一个元素 list[-1]=4 ( 与 list[3]=4 一样)
# inputWords[-1::-1] 有三个参数
# 第一个参数 -1 表示最后一个元素
# 第二个参数为空,表示移动到列表末尾
# 第三个参数为步长,-1 表示逆向
inputWords=inputWords[-1::-1]
# 重新组合字符串
output = ' '.join(inputWords)
return output
if __name__ == "__main__":
input = 'I like runoob'
rw = reverseWords(input)
print(rw)
列表还可以通过$append$来添加元素
多个语句构成代码组
缩进相同的一组语句构成一个代码块,我们称之代码组。
像$ if $、$ while $ 、$ def $ 和$ class$ 这样的复合语句,首行以关键字开始,以冒号( : )结束,该行之后的一行或多行代码构成代码组。
if expression :
suite
elif expression :
suite
else :
suite
Tuple(元组)
元组(tuple)与列表类似,不同之处在于元组的元素不能修改。元组写在小括号 () 里,元素之间用逗号隔开。
元组中的类型也可以不相同
Set(集合)
集合(set)是由一个或数个形态各异的大小整体组成的,构成集合的事物或对象称作元素或是成员。
基本功能是进行成员关系测试和删除重复元素。
可以使用大括号 ${ }$ 或者 $set()$ 函数创建集合,注意:创建一个空集合必须用 $set()$ 而不是 ${ }$,因为 ${ }$ 是用来创建一个空字典。
创建格式:
st = {1,2,3,4,5}
a = set("1234567")
print("a:",a)
print("st:",st)
a: {'2', '3', '1', '4', '6', '5', '7'}
st: {1, 2, 3, 4, 5}
当然,对于一个已有元素的$set$,如果我们需要往这个里面添加元素的话,我们可以使用$add$函数来进行添加
注意这里的集合是一个 没有顺序 的集合
对于集合来说我们通常还需要判断一个集合和另外一个集合之间的关系,那么实际上 $python$也为我们提供了这些方法
print(a - b) # a 和 b 的差集
print(a | b) # a 和 b 的并集
print(a & b) # a 和 b 的交集
print(a ^ b) # a 和 b 中不同时存在的元素,即只在一个集合中出现
a = set("145296")
b = set("256789")
print(a - b)
print(a | b)
print(a & b)
print(a ^ b)
{'1', '4'}
{'1', '5', '8', '9', '2', '4', '6', '7'}
{'9', '5', '2', '6'}
{'1', '4', '8', '7'}
Dictionary(字典)
字典是一种映射类型,字典用 ${ }$标识,它是一个无序的 键$(key)$ : 值$(value)$ 的集合。
键$(key)$必须使用不可变类型。
在同一个字典中,键$(key)$必须是唯一的。
注意对于字典的构造函数$dict()$也可以直接从键值对序列中构建字典如下
>>> dict([('Runoob', 1), ('Google', 2), ('Taobao', 3)])
{'Runoob': 1, 'Google': 2, 'Taobao': 3}
>>> {x: x**2 for x in (2, 4, 6)}
{2: 4, 4: 16, 6: 36}
>>> dict(Runoob=1, Google=2, Taobao=3)
{'Runoob': 1, 'Google': 2, 'Taobao': 3}
输入
读取键盘输入
$python$提供$input()$函数从标准输入中读入一行 文本
str = input()
print(str)
读取一行中的多个数字
# 读取一行中的两个整数
a, b = map(float, input().split())
print(a,b)
读取一行中的数字,两个数字类型不一样
# 读取一行中的两个数字
a, b = input().split()
a = int(a)
b = float(b)
print(a,b)
读取一个文件直到末尾
# 打开文件
with open("test.txt", "r") as f:
# 读取文件的每一行
for line in f:
# 在这里处理每一行的数据
print(line)
Python循环语句
while循环
$python$中并不存在$do…while$的语法,因此我们可以直接用$while$来写。
除此之外$python$还存在在一个$while$后面跟着$else$
一般来说是如果我当前的$while$不执行的话那么我就会直接走后面的$else$
n = 10
now = 0
sum = 0
while now <= n:
sum += now
now += 1
else:
print("sum??",sum)
比如上面的程序就是先去计算$1…10$的和然后跳出循环之后直接输出这个和是多少
for循环
我们需要注意的是,对于$python$来说,$for$循环可以遍历任何可以迭代的对象,比如一个列表或者一个字符串
a = [1,2,3,4,5]
for i in a:
if(i == 3):
print("Good number")
break
print("now number is",i)
else:
print("no good number")
print("finish")
对于上述程序我们跑出来的结果是
now number is 1
now number is 2
Good number
finish
更改成以下内容跑出来的数据相对应的是
a = [1,2,7,4,5]
for i in a:
if(i == 3):
print("Good number")
break
print("now number is",i)
else:
print("no good number")
print("finish")
now number is 1
now number is 2
now number is 7
now number is 4
now number is 5
no good number
finish
range函数
遍历数字序列的时候我们可以使用内置的$range$函数
for i in range(5):
print(i,end = " ")
0 1 2 3 4
如何指定区间的话,假设$range(l,r)$,那么我们获得的数字就是从$l$然后一直到$r - 1$
for i in range(5,10):
print(i,end = " ")
5 6 7 8 9
当然$range$还具有第三个参数步长,可以通过给这个步长一些指定的参数来进行循环
sum = 0
for i in range(0,10,2):
print(i)
sum += i
print(sum)
比如上述程序就会从$0 - 8$逐个相加
sum = 0
for i in range(0,10,2):
print(i)
sum += i
print(sum)
同时我们也可以通过$range$和$len$函数去遍历一个序列的索引
a = [1,2,3,4,55,666,7777]
for i in range(len(a)):
print(i,a[i])
0 1
1 2
2 3
3 4
4 55
5 666
6 7777