目录
1.输入输出
1.1 输入 input()
Python提供input()函数用于获取用户键盘输入的字符。当获取用户输入后,Python将其以字符串的形式存储在一个变量中,方便后面使用。
>>> name=input()
zhangsan
>>> name
'zhangsan'
如果要提示用户输入,可以在input()内加入要提示的内容,如:
>>> name=input('Please enter your name:')
Please enter your name:zhangsan
>>> name
'zhangsan'
1.2 输出 print()
·在Python中使用 print() 函数进行输出;
·输出字符串时可用单引号 ' 或双引号 " 引起来;
·输出变量时可不加引号;
·变量与字符串同时输出或多个变量同时输出时,需用 , 隔开。
>>> print('You are good!')
You are good!
>>> print(666)
666
>>> print('You are good!',666)
You are good! 666
2.数据类型和变量
2.1基本数据类型
数据类型 | 描述 | 示例 |
---|---|---|
数字(Number) | 表示数字值 | 10 , 3.14 , 1 + 2j |
字符串(String) | 表示文本值 | 'hello' , "world" , '''This is a multiline string''' |
列表(List) | 表示可变序列 | [1, 2, 3] , ['apple', 'banana', 'cherry'] |
元组(Tuple) | 表示不可变序列 | (1, 2, 3) , ('apple', 'banana', 'cherry') |
集合(Set) | 表示无序且不重复的元素集合 | {1, 2, 3} , {'apple', 'banana', 'cherry'} |
字典(Dictionary) | 表示键值对集合 | {'name': 'John', 'age': 36, 'city': 'New York'} |
布尔值(Boolean) | 表示True或False值 | True , False |
空值(None) | 表示没有值 | None |
整数运算永远是精确的,而浮点数运算可能会有四舍五入的误差。(列表、元组、集合、字典会在后面提到)
注意:Python中的除法 / 会得到精确数,而 // 会对得数取整。
Python允许用 '''...''' 的格式表示多行内容,在输入多行内容时,提示符由 >>> 变为 ... 。
>>> print('''line1
... line2
... line3''')
line1
line2
line3
多行字符串 '''...''' 还可以在前面加上 r 使用:
>>> print(r'''hello,\n
... world''')
hello,\n
world
*加上 r 说明字符串是一个原始字符串,转义字符将不再有效。
布尔值可用 and 、 or 和 not 运算。
2.2变量
变量名规范:必须是大小写英文、数字和_的组合,且不能用数字开头。
在Python中,等号 = 是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量,例:
>>> a=123
>>> print(a)
123
>>> a='ABC'
>>> print(a)
ABC
3.字符串和编码
3.1 字符编码
在计算机内存中,统一使用Unicode编码(其中包含ASCII编码),当需要保存到硬盘或者需要传输的时候,就会被转换为UTF-8编码。
3.2 Python的字符串
对于单个字符编码,Python提供了 ord() 函数获取字符的整数表示:
>>> ord('A')
65
>>> ord('中')
20013
chr() 函数把编码转换为对应的字符:
>>> chr(65)
'A'
>>> chr(20013)
'中'
str:一个字符对应若干个字节
bytes:每个字符都只占用一个字节
以Unicode表示的 str 通过 encode() 方法可以编码为指定的 bytes ,相反则用 decode() .
>>> 'ABC'.encode('ascii')
b'ABC'
>>> b'ABC'.decode('ascii')
'ABC'
在bytes中,无法显示为ASCII字符的字节,用\x##显示。
注意:Python源代码也是一个文本文件,所以当源代码中包含中文时,在保存源代码时,务必指定为UTF-8编码。通常在文件开头写上这两行:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
第一行注释是为了告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释;
第二行注释是为了告诉Python解释器,按照UTF-8编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码。
如你可在Notepad++中选中编码中的 UTF-8 编码,因版本更新原因,所以去掉了原先的 without BOM 后缀语句。
Python格式化方式与C语言一致,即%d表示用整数替换。如果有多个需要格式化,则需要加括号,如:
>>> 'Age:%d.Gender:%s'%(18,'男')
'Age:18.Gender:男'
f-string 方法:格式化字符串,以 f 开头,字符串如果包含{xxx},就会以对应的变量替换。
>>> r=2.5
>>> s=3.14*r**2
>>> print(f'The area of a circle with radius {r} is {s:.2f}')
The area of a circle with radius 2.5 is 19.62
4.使用 list 和 tuple
4.1 列表 list
·列表 list 是一种有序的集合,可以随时添加和删除其中的元素;
·可用索引访问 list 中每一个元素的位置。变量名[索引],类似于数组;
·索引从 0 开始,最后一个元素的索引可以表示为 len(变量名)-1 或 -1 ,依此类推,可获取倒数第2个、倒数第3个。
>>> classmates=['zhangsan','lisi','wangwu']
>>> classmates
['zhangsan', 'lisi', 'wangwu']
>>> classmates[0]
'zhangsan'
>>> classmates[len(classmates)-1]
'wangwu'
>>> classmates[-1]
'wangwu'
>>> classmates[-2]
'lisi'
①在 list 中追加元素到末尾: append()
>>> classmates=['zhangsan','lisi','wangwu']
>>> classmates.append('adam')
>>> classmates
['zhangsan', 'lisi', 'wangwu', 'adam']
②把元素插入到指定位置: insert()
>>> classmates.insert(1,'jack')
>>> classmates
['zhangsan', 'jack', 'lisi', 'wangwu', 'adam']
③删除 list 末尾的元素: pop()
>>> classmates.pop()
'adam'
>>> classmates
['zhangsan', 'jack', 'lisi', 'wangwu']
④删除指定位置的元素: pop(i) ,i是索引位置
>>> classmates.pop(1)
'jack'
>>> classmates
['zhangsan', 'lisi', 'wangwu']
⑤把某个元素替换成别的元素,可直接赋值给对应的索引位置
>>> classmates[1]='sarah'
>>> classmates
['zhangsan', 'sarah', 'wangwu']
* list 里面的元素的数据类型可以不同,如:
>>> L=['apple',123,True]
>>> L
['apple', 123, True]
* list 元素也可以是另一个 list ,如:
>>> s=['python','java',['asp','php'],'scheme']
>>> len(s)
4
也可拆开理解为:
>>> p=['asp','php']
>>> s=['python','java',p,'scheme']
>>> len(s)
4
要获取 'php' 可以写 p[1] 或 s[2][1] ,因此 s 可看作为二维数组。
空的 list :
>>> L=[]
4.2 元组 tuple
和 list 类似,但 tuple 一旦初始化就不能修改(即指向不变)。
在定义 tuple 的时候,元素就必须被确定下来。
>>> t=(1,2)
>>> t
(1, 2)
空的 tuple :
>>> tuple()
如果要定义一个只有1个元素的 tuple ,必须加一个逗号 , 来消除与数学公式发生的歧义,如:
>>> t=(1,)
>>> t
(1,)
5.条件判断
age=20
if age>=6:
print('teenager')
elif age>=18:
print('adult')
else:
print('kid')
运行结果:
teenager
解释:从上往下判断,如果在某个判断上是 True ,把该判断对应的语句执行后,就忽略掉剩下的 elif 和 else 。
if 判断条件可以简写:
if x: # 只要x是非零数值、非零字符串、非空list等,就判断为True,否则false
print('True')
** input() 返回的数据类型是 str , str 不能直接和整数比较,必须先把 str 转换成整数。
s=input('birth:')
birth=int(s)
if birth<2000:
print('00前')
else:
print('00后')
运行结果:
birth:2004
00后
6.循环
6.1 for...in
依次把 list 或 tuple 中的每个元素迭代出来。
names=['zhangsan','lisi','wangwu']
for name in names:
print(name)
运行结果:
zhangsan
lisi
wangwu
6.2 while
计算100以内所有奇数之和:
sum = 0
n = 99
while n > 0:
sum = sum + n
n = n - 2
print(sum)
运行结果:
2500
* break 和 continue 都必须配合 if 使用。
7.使用 dict 和 set
7.1 dict
使用 键-值(key-value)存储,具有极快的查找速度。类似于查字典时通过偏旁部首(索引)来确定页数,而 list 是一页一页地查找。
>>> d={'zhangsan':95,'lisi':75,'wangwu':85}
>>> d['zhangsan']
95
把数据放入 dict 的方法除了初始化时指定外,还可通过 key 放入:
>>> d['adam']=67
>>> d['adam']
67
注意:一个 key 只能对应一个 value ,多次对一个 key 放入 value ,后面的值会把前面的值冲掉。
如果 key 不存在, dict 就会报错。避免 key 不存在的错误,2种方法:
①通过 in 判断
>>> 'Tom' in d
False
②通过 dict 提供的 get() 方法,如果 key 不存在,可以返回 None 或自己指定的 value
>>> d.get('Tom')
>>> d.get('Tom',-1)
-1
*返回 None 时不显示结果。
和 list 比较, dict 的特点:
1.查找和插入的速度极快,不会随着key的增加而变慢;
2.需要占用大量的内存,内存浪费多。
7.2 set
和 dict 类似,也是一组 key 的集合,但不存储 value 。由于 key 不能重复,所以在 set 中没有重复的 key , dict 中也没有 。
要创建一个 set ,需提供一个 list 作为输入集合。
>>> s=set([1,2,3]) # 告诉set内部有这3个元素
>>> s
{1, 2, 3}
set 特点:
①重复元素自动被过滤;
②可通过 add(key) 添加元素;
>>> s.add(4) >>> s {1, 2, 3, 4}
③可通过 remove(key) 删除元素;
>>> s.remove(4) >>> s {1, 2, 3}
④可看作无序和无重复元素的集合,即数学意义上的交集、并集。
8.不可变对象(再议)
str 是不变对象,而 list 是可变对象。
>>> a=['c','b','a']
>>> a.sort()
>>> a
['a', 'b', 'c']
对于不可变对象 str :
>>> a='abc'
>>> a.replace('a','A')
'Abc'
>>> a
'abc'
对于不变对象来说,调用对象自身的任意方法,也不会改变该对象自身的内容。相反,这些方法会创建新的对象并返回。
看100遍不如敲1次!好啦,今天就到这里了,我们下期再见!