自学python入门课程作为补充。博客记作学习笔记,便于回顾复习
前一周已经在实验楼学习了linux入门课程,所以python部分的linux入门直接跳过,从挑战一:创建代码文件开始
挑战目标:在 /home/shiyanlou 目录下创建 shiyanlou.py 文件;在文件中输入以下内容print('hello shiyanlou')
;进入 Code 目录,新建名为 test 的目录,然后将刚创建的 /home/shiyanlou/shiyanlou.py 文件复制到目录 /home/shiyanlou/Code/test 中
实验代码
touch shiyanlou.py
cd /home/shiyanlou/Code //进入Code目录
mkdir test //创建test目录
vim shiyanlou.py //进入vim编辑器,编辑shiyanlou.py文件
cp shiyanlou.py /home/shiyanlou/Code/test //复制文件到test目录下
认识python
输入python3
进入python的交互环境
- print函数
print('xxxxxxxxxx')
引号可以是单引号,也可以是双引号,但必须是英文符号,且前后一致
使用三引号'''可打印多行内容
- 赋值
等号在Python里的意思是「赋值符」,代表把右边的数据赋值给左边
变量的右边,甚至可以是另一个变量
- input
主要作用是让用户输入某个内容并接收它
- 字符串
包裹字符串的引号必须前后对应,成对出现。如果字符串中还有引号,如 He said "Today's weather is good.",直接写 print('He said "Today's weather is good."') 就会报错
正确的写法是,在 Today 后面加入 转义符 ;转义符 还有一个常用形式是和 n 连起来用, \n 代表换行符
- format()
format() 是专门用来 格式化字符串 的函数,它最常用的功能就是「插入数据」和「数字格式化」
1.插入数据
2.数字格式化
只保留两位小数
print("{:.2f}".format(3.1415926))
- 注释
'#' 常被用作写单行注释,# 号后的内容会被忽略,不会被当作代码处理
- 算术运算符
运算符 | 名称 | 描述 |
---|---|---|
/ | 除 | x 除以 y |
% | 取模 | 返回除法的余数 |
** | 幂 | 返回 x 的 y 次幂 |
// | 取整 | 除返回商的整数部分(向下取整) |
- 比较运算符
运算符 | 描述 |
---|---|
== | 等于:比较对象是否相等 |
!= | 不等于:比较两个对象是否不相等 |
> | 大于:返回 x 是否大于 y |
< | 小于:返回 x 是否小于 y |
>= | 大于等于:返回 x 是否大于等于 y |
<= | 小于等于:返回 x 是否小于等于 y |
在 Python 和大多数高级语言中:一个等号代表赋值符,两个等号才代表数学意义上的“相等”
- 逻辑运算符
运算符 | 逻辑 | 表达式结果 |
---|---|---|
and(逻辑与) | a and b | 当 a、b 都为 True 时,返回 True;否则返回 False |
or(逻辑或) | a or b | 当 a、b 任意一个为 True,就返回 True |
not(逻辑非) | not a | 当 a 为 True 时,返回 False;反之亦然 |
在逻辑运算中,数字 0 代表 False,1 代表 True
- 创建文件
我使用vim编辑器创建文件,在终端中输入vim test1.py
,这条命令为:用 gedit 打开 test.py 文件;如果该文件不存在,则创建它并打开
直接使用 Python3 解释器执行 test.py
python3 test1.py
文件中的内容直接显示在终端上
- 流程控制
if 语句最简单的构成是这样的:
if xxxxx:
xxxxxxx
注意第 1 行末尾的冒号 : 和第 2 行的 4 个空格缩进
除此之外,Python 还加入了 elif,即 else if,方便执行更复杂的判断
if 看到卖西瓜的: #当满足条件时,执行内部的代码;如不满足,则跳到下一个语句块
买 2 个
elif 看到卖苹果的:
买 4 个
elif 看到卖香蕉的:
买 5 根
else: # 如果上面的条件都不满足,则执行 else 内部的代码
不买
在一个判断中,还可以嵌套另一套判断
if 亚洲人:
if 中国人:
老乡
else:
亚裔非中国人
else:
外国人
还可以使用 and 和 or 进行综合控制
if 那A and b: # A 和 B必须同时满足才能执行
可以xxxx
else:
不可以xxxx
- 循环
for循环(适用于已知循环次数的循环,所以后面跟的是次数或区间,到达指定次数就停止)
注意:第 1 行末尾的冒号 ':' 和第 2 行的 4 个空格缩进
range() 函数
如果需要处理一组数字列表,并且数字列表满足一定的规律,可以使用 Python 的内置函数 range()
使用 range(x) 函数,可以生成一个从 0 到 x-1 的整数序列,比如打印 0 到 9 的数
for a in range(10):
print(a)
还可以用 range(a,b) 取某个区间的数,比如要打印 1 到 10
for a in range(1,11):
print(a)
range(a,b) 包头不包尾,尾数要 + 1
小练习:用 for 循环帮依萍写出“书桓走的第 n 天,想他”,一直写到第 10 天。
while循环(后面跟的是一个条件,只要条件满足,这个循环就会一直进行下去)
打印 1 到 10 的数字
a = 1
while a <= 10: ##同样注意冒号和语句块缩进
print(a)
a = a + 1
break表示停止当前循环,如
for a in range(10):
if a == 5:
break
print(a)
程序会打印 0 到 4 之间的数字
continue 表示跳过当前循环轮次,去执行下一轮循环,如
a = 0
while a < 10:
a = a + 1
if a == 5:
continue
print(a)
这次打印 1 到 10 的数,但不打印 5
挑战二:逢 7 跳过
7 的倍数,可以理解为除以 7 余数为 0 的数
个位上是 7 的数,即除以 10 余 7 的数
十位上是 7 的数,即除以 10 取整数为 7 的数
for a in range(1,101):
if a%7==0 or a%10==7 or a//10==7:
continue
print(a)
- 列表
添加元素 45 到列表末尾
>>> a = [23, 45, 1, -3434, 43624356, 234]
>>> a.append(45) #在列表尾部添加元素
>>> a
[23, 45, 1, -3434, 43624356, 234, 45]
用 insert
在列表的任何位置插入元素
>>> a.insert(0, 1) # 在列表索引 0 位置添加元素 1
>>> a
[1, 23, 45, 1, -3434, 43624356, 234, 45]
>>> a.insert(0, 111) # 在列表索引 0 位置添加元素 111
>>> a
[111, 1, 23, 45, 1, -3434, 43624356, 234, 45]
count(s)
会返回列表元素中 s 的数量
remove(xx)
删除列表中的任意元素
reverse()
反序排列整个列表
extend()
将一个列表添加到另一个列表后
>>> b = [45, 56, 90]
>>> a.extend(b) # 添加 b 的元素而不是 b 本身
>>> a
[45, 43624356, -3434, 1, 45, 23, 1, 111, 45, 56, 90]
sort()
给列表内元素排序
>>> a.sort()
>>> a
[-3434, 1, 1, 23, 45, 45, 45, 56, 90, 111, 43624356]
pop()
弹出最后一个元素
>>> a = [1, 2, 3, 4, 5, 6]
>>> a
[1, 2, 3, 4, 5, 6]
>>> a.pop()
6
>>> a.pop()
5
>>> a.pop()
4
>>> a.pop()
3
>>> a
[1, 2]
pop(0)
弹出第一个元素
>>> a = [1, 2, 3, 4, 5]
>>> a.append(1)
>>> a
[1, 2, 3, 4, 5, 1]
>>> a.pop(0)
1
>>> a.pop(0)
2
>>> a
[3, 4, 5, 1]
列表推导式由包含一个表达式的中括号组成,表达式后面跟随一个 for 子句,之后可以有零或多个 for 或 if 子句。结果是一个列表,由表达式依据其后面的 for 和 if 子句上下文计算而来的结果构成
squares = [x**2 for x in range(10)] # 等价与下面的列表构建方式
>>> squares = []
>>> for x in range(10):
... squares.append(x**2)
...
>>> squares
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
多个 for 语句
>>> [(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]
- 元组
元组是由数个逗号分割的值组成
>>> a = 'Fedora', 'ShiYanLou', 'Kubuntu', 'Pardus'
>>> a
('Fedora', 'ShiYanLou', 'Kubuntu', 'Pardus')
>>> a[1]
'ShiYanLou'
元组是不可变类型,这意味着不能在元组内删除或添加或编辑任何值。否则将会出错
>>> a = (1, 2, 3, 4)
>>> del a[0]
Traceback (most recent call last):
File "", line 1, in
TypeError: 'tuple' object doesn't support item deletion
要创建只含有一个元素的元组,在值后面跟一个逗号
>>> a = (123)
>>> a
123
>>> type(a) # 查看a的数据类型
>>> a = (123, )
>>> b = 321,
>>> a
(123,)
>>> b
(321,)
>>> type(a)
>>> type(b)
- 集合
大括号或 set() 函数可以用来创建集合。注意:想要创建空集合,你必须使用 set() 而不是 {}
>>> basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
>>> print(basket) # 你可以看到重复的元素被去除
{'orange', 'banana', 'pear', 'apple'}
>>> 'orange' in basket
True
>>> 'crabgrass' in basket
False
>>> # 演示对两个单词中的字母进行集合操作
...
>>> a = set('abracadabra')
>>> b = set('alacazam')
>>> a # a 去重后的字母
{'a', 'r', 'b', 'c', 'd'}
>>> a - b # a 有而 b 没有的字母
{'r', 'd', 'b'}
>>> a | b # 存在于 a 或 b 的字母
{'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}
>>> a & b # a 和 b 都有的字母
{'a', 'c'}
>>> a ^ b # 存在于 a 或 b 但不同时存在的字母
{'r', 'd', 'b', 'm', 'z', 'l'}
- 字符串
可以通过几种不同的方式表示字符串
>>> s = "I am Chinese"
>>> s
'I am Chinese'
>>> s = 'I am Chinese'
>>> s = "Here is a line \
... split in two lines"
>>> s
'Here is a line split in two lines'
>>> s = "Here is a line \n split in two lines"
>>> s
'Here is a line \n split in two lines'
>>> print(s)
Here is a line
split in two lines
- 函数
使用关键字 def 来定义一个函数,语法描述如下所示
def 函数名(参数):
语句1
语句2
例如
>>> def sum(a, b):
... return a + b
第二行有个 return 关键字,把 a + b 的值返回给调用者,必须像下面这样调用这个函数
>>> res = sum(234234, 34453546464)
>>> res
34453780698L