python
变量和类型
常见的数据类型:
整型:int类型支持二进制八进制十六进制的转换
浮点型:
字符串类型:以单引号和双信号引起来的任意文本,字符串还有原始字符串表示法,unicode表示法等。
布尔型;只有True False两种值(注意大小写)
复数型:这个不常用
变量命名
- 硬性规则:
- 变量名由字母(广义的Unicode字符,不包括特殊字符)、数字和下划线构成,数字不能开头。
- 大小写敏感(大写的
a
和小写的A
是两个不同的变量)。
- 不要跟关键字(有特殊含义的单词,后面会讲到)和系统保留字(如函数、模块等的名字)冲突。
- PEP 8要求:
- 用小写字母拼写,多个单词用下划线连接。
- 受保护的实例属性用单个下划线开头(后面会讲到)。
- 私有的实例属性用两个下划线开头(后面会讲到)。
数据类型的转换:
int()
:将一个数值或字符串转换成整数,可以指定进制。
float()
:将一个字符串转换成浮点数。
str()
:将指定的对象转换成字符串形式,可以指定编码。
chr()
:将整数转换成该编码对应的字符串(一个字符)。
ord()
:将字符串(一个字符)转换成对应的编码(整数)。
运算符:
运算符 |
描述 |
[] [:] |
下标,切片 |
** |
指数 |
~ + - |
按位取反, 正负号 |
* / % // |
乘,除,模,整除 |
+ - |
加,减 |
>> << |
右移,左移 |
& |
按位与 |
^ | |
按位异或,按位或 |
<= < > >= |
小于等于,小于,大于,大于等于 |
== != |
等于,不等于 |
is is not |
身份运算符 |
in not in |
成员运算符 |
not or and |
逻辑运算符 |
= += -= *= /= %= //= **= &= ` |
= ^= >>= <<=` |
python的分支结构
python中代码的结构层次采用缩进的方式来表示,if如果要执行多条语句,只需要保持多条语句有相同的缩进即可,通常使用四个空格。
if
1 2 3 4 5 6 7 8 9
| x = float(input('x = ')) if x > 1: y = 3 * x - 5 else: if x >= -1: y = x + 2 else: y = 5 * x + 3 print('f(%.2f) = %.2f' % (x, y))
|
for-in循环
如果明确知道循环的执行次数,或者要对一个容器进行迭代建议使用for-in循环。例如:计算1~100求和的结果
1 2 3 4
| sum = 0 for x in range(101): sum += x print(sum)
|
需要说明的是上面代码中的range(1, 101)
可以用来构造一个从1到100的范围,当我们把这样一个范围放到for-in
循环中,就可以通过前面的循环变量x
依次取出从1到100的整数。当然,range
的用法非常灵活,下面给出了一个例子:
range(101)
:可以用来产生0到100范围的整数,需要注意的是取不到101。
range(1, 101)
:可以用来产生1到100范围的整数,相当于前面是闭区间后面是开区间。
range(1, 101, 2)
:可以用来产生1到100的奇数,其中2是步长,即每次数值递增的值。
range(100, 0, -2)
:可以用来产生100到1的偶数,其中-2是步长,即每次数字递减的值。
whlie循环
如果要构造不知道具体循环次数的循环结构,我们推荐使用while
循环。while
循环通过一个能够产生或转换出bool
值的表达式来控制循环,表达式的值为True
则继续循环;表达式的值为False
则结束循环。
例如下面的猜数字小游戏
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| import random
answer = random.randint(1, 100) counter = 0 while True: counter += 1 number = int(input('请输入: ')) if number < answer: print('大一点') elif number > answer: print('小一点') else: print('恭喜你猜对了!') break print('你总共猜了%d次' % counter) if counter > 7: print('你的智商余额明显不足')
|
python函数的应用
定义函数:在Python中可以使用def
关键字来定义函数,和变量一样每个函数也有一个响亮的名字,而且命名规则跟变量的命名规则是一致的。在函数名后面的圆括号中可以放置传递给函数的参数,这一点和数学上的函数非常相似,程序中函数的参数就相当于是数学上说的函数的自变量,而函数执行完成后我们可以通过return
关键字来返回一个值,这相当于数学上说的函数的因变量。
阶乘函数:自定义,其中在math库中factorial为阶乘函数
1 2 3 4 5
| def fac(num): result = 1 for n in range(1, num + 1): result *= n return result
|
Python中,函数的参数可以有默认值,也支持使用可变参数,所以Python并不需要像其他语言一样支持函数的重载,因为我们在定义一个函数的时候可以让它有多种不同的使用方式。
引用函数:
1 2 3 4 5
| import module1 as m1 import module2 as m2
m1.foo() m2.foo()
|
1 2 3 4 5
| from module1 import foo from module2 import foo
foo()
|
如果写成上面这个样子,那么输出的即为最后一个foo,会将前面的覆盖。
字符串和常用数据结构
所谓字符串,就是由零个或多个字符组成的有限序列,,如果我们把单个或多个字符用单引号或者双引号包围起来,就可以表示一个字符串。
可以在字符串中使用\
(反斜杠)来表示转义,也就是说\
后面的字符不再是它原来的意义,例如:\n
不是代表反斜杠和字符n,而是表示换行;而\t
也不是代表反斜杠和字符t,而是表示制表符。所以如果想在字符串中表示'
要写成\'
,同理想表示\
要写成\\
。可以运行下面的代码看看会输出什么。
如果不希望字符串中的\
表示转义,我们可以通过在字符串的最前面加上字母r
来加以说明。
Python为字符串类型提供了非常丰富的运算符,我们可以使用+
运算符来实现字符串的拼接,可以使用*
运算符来重复一个字符串的内容,可以使用in
和not in
来判断一个字符串是否包含另外一个字符串(成员运算),我们也可以用[]
和[:]
运算符从字符串取出某个字符或某些字符(切片运算)。例如下面:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| s1 = 'hello ' * 3 print(s1) s2 = 'world' s1 += s2 print(s1) print('ll' in s1) print('good' in s1) str2 = 'abc123456'
print(str2[2])
print(str2[2:5]) print(str2[2:]) print(str2[2::2]) print(str2[::2]) print(str2[::-1]) print(str2[-3:-1])
|
对字符串的处理:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| str1 = 'hello, world!'
print(len(str1))
print(str1.capitalize())
print(str1.title())
print(str1.upper())
print(str1.find('or')) print(str1.find('shit'))
print(str1.startswith('He')) print(str1.startswith('hel'))
print(str1.endswith('!'))
print(str1.center(50, '*'))
print(str1.rjust(50, ' ')) str2 = 'abc123456'
print(str2.isdigit())
print(str2.isalpha())
print(str2.isalnum()) str3 = ' jackfrued@126.com ' print(str3)
print(str3.strip())
|
a*b=多少的简洁写法
1 2
| a, b = 5, 10 print(f'{a} * {b} = {a * b}')
|
接下来我们要介绍的列表(list
),也是一种结构化的、非标量类型,它是值的有序序列,每个值都可以通过索引进行标识,定义列表可以将列表的元素放在[]
中,多个元素用,
进行分隔,可以使用for
循环对列表元素进行遍历,也可以使用[]
或[:]
运算符取出列表中的一个或多个元素。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| list1 = [1, 3, 5, 7, 100] print(list1)
list2 = ['hello'] * 3 print(list2)
print(len(list1))
print(list1[0]) print(list1[4])
print(list1[-1]) print(list1[-3]) list1[2] = 300 print(list1)
for index in range(len(list1)): print(list1[index])
for elem in list1: print(elem)
for index, elem in enumerate(list1): print(index, elem)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| list1 = [1, 3, 5, 7, 100]
list1.append(200) list1.insert(1, 400)
list1 += [1000, 2000] print(list1) print(len(list1))
if 3 in list1: list1.remove(3) if 1234 in list1: list1.remove(1234) print(list1)
list1.pop(0) list1.pop(len(list1) - 1) print(list1)
list1.clear() print(list1)
|
面向对象编程
定义类
class定义类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| class Student(object):
def __init__(self, name, age): self.name = name self.age = age
def study(self, course_name): print('%s正在学习%s.' % (self.name, course_name))
def watch_movie(self): if self.age < 18: print('%s只能观看《熊出没》.' % self.name) else: print('%s正在观看岛国爱情大电影.' % self.name)
|
创建和使用对象
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| def main(): stu1 = Student('骆昊', 38) stu1.study('Python程序设计') stu1.watch_movie() stu2 = Student('王大锤', 15) stu2.study('思想品德') stu2.watch_movie()
if __name__ == '__main__': main()
|
练习:
1.定义一个类似描述数字的时钟
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| from time import sleep
class Clock(object): """数字时钟"""
def __init__(self, hour=0, minute=0, second=0): """初始化方法
:param hour: 时 :param minute: 分 :param second: 秒 """ self._hour = hour self._minute = minute self._second = second
def run(self): """走字""" self._second += 1 if self._second == 60: self._second = 0 self._minute += 1 if self._minute == 60: self._minute = 0 self._hour += 1 if self._hour == 24: self._hour = 0
def show(self): """显示时间""" return '%02d:%02d:%02d' % \ (self._hour, self._minute, self._second)
def main(): clock = Clock(23, 59, 58) while True: print(clock.show()) sleep(1) clock.run()
if __name__ == '__main__': main()
|
练习2:定义一个类描述平面上的点并提供移动点和计算到另一个点距离的方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| from math import sqrt
class Point(object):
def __init__(self, x=0, y=0): """初始化方法 :param x: 横坐标 :param y: 纵坐标 """ self.x = x self.y = y
def move_to(self, x, y): """移动到指定位置 :param x: 新的横坐标 "param y: 新的纵坐标 """ self.x = x self.y = y
def move_by(self, dx, dy): """移动指定的增量 :param dx: 横坐标的增量 "param dy: 纵坐标的增量 """ self.x += dx self.y += dy
def distance_to(self, other): """计算与另一个点的距离 :param other: 另一个点 """ dx = self.x - other.x dy = self.y - other.y return sqrt(dx ** 2 + dy ** 2)
def __str__(self): return '(%s, %s)' % (str(self.x), str(self.y))
def main(): p1 = Point(3, 5) p2 = Point() print(p1) print(p2) p2.move_by(-1, 2) print(p2) print(p1.distance_to(p2))
if __name__ == '__main__': main()
|