1. 基本语法
(1) 加法的两端只能是数字或者字符串.
如 print( 'kkk' + 12 + 'kkk' ) 是错误的, 可修改为 print( 'kkk' + str(12) + 'kkk' ) . 类似 str() 的函数还有 int(),float().
- print(str(0)) #输出字符串的 0
- print(int('33'))
- print(int(3.26)) #输出 3
- print(float(3.402))
- print(float(23)) #输出 23.0
- print(int(input()))
(2) 在用于条件时, 0,0.0, 和 ' ' (空字符串) 被当作 False, 其他值被当作 True, 如
- name = ''
- while not name: #只有输入有效的名字才跳出循环
- name = input()
- print('your name:' + name)
- name = 0
- while not name:
- name = int(input())
- print('最终结果:' + str(name)) #输入非 0 整数结束
2. 数学操作符
指数:**. 如 2 ** 3 = 8.
整除://. 如 6 // 4 = 1.
除法:/. 如 6 / 4 = 1.5.
* 操作符表示乘法, 但是当 * 和字符串连用时, 表示将字符串复制的操作. 如
print('Jack' * 2) #输出 JackJack. 同时注意 只能同整数配套使用
其他操作同 C 语言一致.
3. 布尔操作符
and,not,or 代替了 C 语言的 && 和 ||
4. 控制流
(1)if-else: 关键是通过控制代码块的缩进距离, Python 没有花括号, 如
- name = 'Jack'
- age = 2
- if(name == 'Jack'):
- print('Hello,Jack')
- if(age> 10):
- print('>10')
- else:
- print('<10')
- else:
- print('Who are you?')
(2)while 循环
- age = 5
- while age < 9:
- age += 1 #不支持 age++
- print('age:' + str(age))
- if(age == 7):
- break
- print('end')
- sum = 0
- while True:
- if sum == 3:
- print('错误次数超过三次!')
- break
- else:
- name = input()
- if name != '11':
- sum += 1
- print('用户名错误, 重新输入用户名:')
- continue
- else:
- print('用户名正确, 输入密码:')
- pwd = input()
- if pwd != '11':
- print('密码错误, 重新输入用户名:')
- sum += 1
- continue
(3)for 循环. range(开始, 停止 [不包括它] , 步长)
- i = 0
- for i in range(0,10,2):
- print(i) #0,2,4,6,8
5. 字符串
(1) 字符串相等否, 可直接用 == 或者 != 判断
- a = 'q'
- s = 'qq'
- if a != s:
- print("yes")
- else:
- print("no")
(2) 字符串的截取. 同 C 语言的差别就是标号的不一致, 如下图 ()
如上图所示, 即'abcdef' 的下表是 0~5 或者 -6~-1. 同时规则也常用: 前闭后开.
- str = 'abcdef'
- print(str[0] + str[2]) #ac
- print(str[-6] + str[-1]) #af
- print(str[0:]) #abcdef
- print(str[-3:]) #def
- print(str[0:3]) #abc
- print(str[3:2]) #无结果 不能逆序
- print(str[1:-1]) #bcde
- print(str[-6:2]) #ab
- print(str[:2]) #ab
- print(str[:]) #abcdef
(3) 同样可使用 in 和 not in 操作符
- str = '12345ddd6789'
- print('ddd' in str) #True
- print('012' not in str) #True
(4) 数组是可变的, 如 append,insert,del 等, 但是字符串是 "不可变" , 如 str[0] = 'd' , 改变的方式是通过切边方式, 如
- str = '123456789'
- str2 = str[0:2] + 'add' + str[6:8]
- print(str2) #12add78
6. 函数
(1) 函数定义 def + 函数名 (传参), 如
- def hello(name): #传递的参数
- print('你输入了:' + name)
- i = 0
- for i in range(0,3,1):
- hello(input())
- import random #导入函数
- def getNumber(j):
- if j == 1:
- print('随机数:' + str(j))
- return 'A'
- elif j == 2:
- print('随机数:' + str(j))
- return 'B'
- else:
- print('随机数:' + str(j))
- return 'C'
- i = 0
- for i in range(0,3,1):
- r = random.randint(1,3) #random.randint 函数是产生 1<=*<=3 的整数
- print(getNumber(r))
(2)print() 函数. print() 函数返回值为 None.
- temp = print('测试返回值')
- if temp == None:
- print('yes',str(temp))
print() 函数输出形式:
- print('1','2','3') #空格自动分割
- print('1', end='')
- print('2') # print 函数自动会加入换行符, end = '' 就制止
- print('1','2','3',sep='..') #输出通过 '..' 分割
(3)global 语句. 同 C 语言中一致, Python 中也分局部和全局变量, 如果想通过局部函数修改全局变量, 可以通过 global 函数.
- def k1():
- global t
- t = '已经修改 1'
- def k2():
- t = '已经修改 2'
- t = '原始'
- print(t) #原始
- k2()
- print(t) #原始
- k1()
- rint(t)p #已经修改 1
Python 中一个变量只能是局部或者全局变量, 如
- def k():
- print(egg) #调用 K() 函数时, egg 此句是全局变量, 但在下一句中 egg 被重新声明被认为是局部变量. 报错
- egg = '123'
- egg = '444'
- k()
(4)try...except.. 函数.
- def k(divide):
- try:
- return 32 / divide
- except:
- return '报错'
- print(k(3))
- print(k(2))
- print(k(0))
7. 数组
(1) 用 len() 取得列表长度. 直接通过下表修改值
- a = [12, 'dd', 2]
- print(len(a))
- a[0] = 'ppp'
- print(a)
(2) 数组的连接, 复制, 删除
- a = [12, 'dd', 2]
- b = ['14']
- d = b
- c = b + a
- e = b * 3
- print(d,c,e,sep='.....') #['14'].....['14', 12, 'dd', 2].....['14', '14', '14']
- del a[0] #删除操作
- print(a) #['dd', 2]
(3) 数组循环
- catName = []
- while True:
- print('请输入第' + str(len(catName) + 1) + '只猫名字')
- name = input()
- if name == '': #直接敲回车
- break
- catName += [name]
- print('共'+ str(len(catName)) + '只猫')
- for name in catName: #没有使用 range
- print(' ' + name)
- catName = ['fdas','fd','ioo','wew','dfs']
- for i in range(0,len(catName),2): #常用 range(len(catName)) 遍历整个数组
- print(' ' + catName[i]) #fdas ioo dfs
(4) 某个值是否在数组中用, in 和 not in 判断
- import random
- catName = ['1','2','3','4','5']
- i = 0
- for i in range(0,4,1):
- t = random.randint(1,10)
- if(str(t) in catName):
- print(str(t),'在')
- if(str(t) not in catName):
- print(str(t),'不在')
(5) 多重赋值
- name = ['1','2']
- t,a = name
- print(t,a) #输出 1 2
(6)index() 方法, append(),insert(),remove(),sort().
- name = ['1','2','1','999']
- print(name.index('1')) #返回在数组中第一个出现的下标 0
- name.append('4') #在列表中添加新值
- print(name) #['1', '2', '1', '999', '4']
- name.insert(1,'999') #在下标 1 处添加新值
- print(name) #['1', '999', '2', '1', '999', '4']
- name.remove('999') #删除在数组中第一次出现的 999, 若不存在 999 则报错
- print(name) #['1', '2', '1', '999', '4']
- del name[0]
- print(name) #['2', '1', '999', '4']
- name.sort(reverse=True) #排序操作 ASCII 码进行排序, 可直接 name.sort()
- print(name) #['999', '4', '2', '1']
8. 元组
(1) 元组和数组十分类似, 主要区别有两点如下:
元组输入时使用 () 而非 [ ]
- a = (1,2,3)
- print(a) #输出 (1,2,3)
- print(a[2]) #3
元组中的值不能修改, 和字符串类似. 所以 Python 可以以更优化的方式对待元组. 同时, 元组中如果之后一个值, 通过加逗号来标识其是元组.(否则 Python 认为你只是普通括号)
- a = (1,) #不加逗号, 下句出错. 当元组长度只为 1 时使用
- print(a[0])
(2) 用 list 和 tuple 函数来转换类型. 常用于返回元组或者列表形式.
- str = '1234'
- print(list(str)) #['1', '2', '3', '4']
- print(tuple(str)) #('1', '2', '3', '4')
- str2 = ('12','dd')
- print(list(str2)) #['12', 'dd']
9. 引用
(1)Python 中关于引用的知识点同 C 语言中十分类似, C 语言中如: int a = 3, 实际上 a 形参是通过地址找到存储 3 整个数字的 " 格子
而数组 a[1,2,3] 则直接
. 这和 Python 几乎一致. 所以在 Python 中, 普通类型的复制如 b = a 复制值, 而数组之间复制, 复制的是引用 (即地址). 同样, 如果在传递给函数时, 传递的参数是数组, 则会改变原数组, 传递的是一般数据类型, 则不会修改原值, 如:
- def test(str):
- str += 'g'
- def test2(name):
- del name[0]
- str = 'ddd'
- test(str)
- print(str) #ddd 未修改
- name = [1,2,3]
- test2(name)
- print(name) #[2, 3] #[2, 3] 修改
(2) 在处理列表时, 传入的是引用, 如果只想传入值, 即修改了数组而不影响原有函数, 通过 copy() 实现. 如果要复制的列表中还包含列表, 使用 deepcopy() .
- import copy
- name = [1,2,3,[1,2,3]]
- a = name
- b = copy.copy(name)
- c = copy.deepcopy(name)
- a.append('aaa')wu'xiao'
- print(name) #[1, 2, 3, [1, 2, 3], 'aaa']
- b.append('bbb')
- print(name) #[1, 2, 3, [1, 2, 3], 'aaa'] 说明对列表有效
- b[3].append('444')
- print(name) #[1, 2, 3, [1, 2, 3, '444'], 'aaa'] 说明对列表中的列表有效
- c.append('555')
- print(name) #[1, 2, 3, [1, 2, 3, '444'], 'aaa'] 说明无效
10. 字典
(1) 字典即 Map , 由键值对组成. 字典不同于列表, 字典中表项是不排序的, 如 (字典不能排序)
- t = [1,2,3]
- e = [2,1,3]
- print(t == e) #False
- g = {
- 'k':'j', 'kk':'jj'
- }
- h = {
- 'kk':'jj', 'k':'j'
- }
- print(g == h) #True
- print('k' in g) #True 判断 key 是否存在
(2)keys() 方法, values() 方法, items() 方法.
- g = {'k':'j', 'kk':'jj'}
- for v in g.keys(): #key
- print(v)
- for t in g.values(): #value
- print(t)
- for b in g.items(): #key-value
- print(b) #输出元组
- print(list(b)) #输出列表
- for v,t in g.items(): #多重赋值
- print('Key:',v,"Value",t)
(3)get() 方法. 如果通过 key 值取值, 存在 key 不存在的风险, get() 函数可以设置一个默认返回值, 避免错误.
- g = {
- 'name':'Tom', 'age':'12'
- }
- print('Welcom', g.get('name', 'Jack'), 'he lives in', g.get('home','shanghai'))
(4)setdefault() 方法. 该方法可以设置默认 key 对应的 value. 如果该 key 已经存在, 则无效, 如:
- g = {
- 'r':'rr','b':'bb'
- }
- g.setdefault('k', 'kk')
- print(g) #{
- 'r': 'rr', 'b': 'bb', 'k': 'kk'
- } 修改有效
- g.setdefault('k','mm')
- print(g) #{
- 'r': 'rr', 'b': 'bb', 'k': 'kk'
- } 修改无效
有一个较实用的场景, 统计字符:
- msg = 'fadfasfasdfadsfs'
- count = {}
- for v in msg:
- count.setdefault(v, 0) #很关键 设置为 0, 而不是 1
- count[v] += 1
- print(count)
来源: http://www.bubuko.com/infodetail-3057689.html