Python基础
Posted zhangzixiang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python基础相关的知识,希望对你有一定的参考价值。
一、书写格式
Linux 下shell方式执行
执行方式:./test.py
文件内部:
#!/usr/bin python3 (指定解释器位置)
正文
ps:执行前需给予 hello.py 执行权限,chmod 755 test.py
Linux和Windows下解释器执行
cd (python安装路径)
python3 test.py
ps:在python3中 # -*- coding: UTF-8 -*- 不必写(python2解释器内部用ASCII码解释,所以需要声明字符编码为UTF-8)
注释
当行注释:#
多行注释:""" 被注释内容 """
二、基础语法
循环语句
if语句
1、if -> elif -> elif
2、if 条件:
pass #不能省
else:
语句
while语句
基本数据类型
字符串(引号)
name = "alex"
name = ‘alex‘
name = """alex"""
name = ‘‘‘alex‘‘‘
ps:不能混用引号,python追求简洁漂亮
字符串加法:
n1 = "alex"
n1 = "nb"
n3 = n1 + " " + n2
# n3 = "alex nb"
字符串乘法:
n1 = "alex"
n2 = n1 * 10
字符串一旦创建不可修改,一旦修改或者拼接则重新生成新字符串
数字
+, -, *, /, **, %, // (余 商)
布尔值 bool (java里是boolean)
True = 非零值(包括复数) / False = 0
None "" () [] {} 0 ------> False
name = "魔法少女小圆" # if "小魔" in name: # print(‘OK‘) # else: # print(‘Error‘) #Ctrl + / 批量注释 if ("小圆" not in name) == True: print(‘1‘) else: print(‘2‘)
列表
不同于字符串,以链表方式存储,可以通过切片和索引的方式修改,可删除 del 删除索引或者切片
li = [12,"hello",["庞麦郎", 3, "world", ["mmp"]]] print(len(li[2][3][0][2]))
print(li[1:3]) #切片,结果是列表
result:
1
[‘hello‘, [‘庞麦郎‘, 3, ‘world‘, [‘mmp‘]]]
li = "Remember me" new_li = list(li) print(new_li) result: [‘R‘, ‘e‘, ‘m‘, ‘e‘, ‘m‘, ‘b‘, ‘e‘, ‘r‘, ‘ ‘, ‘m‘, ‘e‘]
要想把列表里的元素全部拼接起来,需要先自己写一个 for 循环,将数字转化成字符串 str()然后 "".join(list) 即可
元组
可以认为是列表的二次加工,一级元素不能修改,但可以进入次级列表进行修改,类似于广义数组,为了与方法作区分,在元祖最后多加一个逗号,以示区分
tu = (21, ["sg"], (23, 24),) print(tu[1][0][1], tu[2][1]) result: g 24
s = "hello world" print(tuple(s)) print(list(s)) print(tuple(list(s))) print(list(tuple(s))) result: (‘h‘, ‘e‘, ‘l‘, ‘l‘, ‘o‘, ‘ ‘, ‘w‘, ‘o‘, ‘r‘, ‘l‘, ‘d‘) [‘h‘, ‘e‘, ‘l‘, ‘l‘, ‘o‘, ‘ ‘, ‘w‘, ‘o‘, ‘r‘, ‘l‘, ‘d‘] (‘h‘, ‘e‘, ‘l‘, ‘l‘, ‘o‘, ‘ ‘, ‘w‘, ‘o‘, ‘r‘, ‘l‘, ‘d‘) [‘h‘, ‘e‘, ‘l‘, ‘l‘, ‘o‘, ‘ ‘, ‘w‘, ‘o‘, ‘r‘, ‘l‘, ‘d‘]
字典
字典是无序的,并且 key 值一一对应,后来居上,覆盖前者
info = {
1: "hello",
2: "hello",
0: "hi",
"key": "world",
True: "python", # 1 原本对应hello,现在对应python
False: "java", # 0 原本对应hi,现在对应java
(11, 22): "youxiu",
#[12, 22]: "Error",
#{1: "win"}: "Error",
}
print(info)
result:
{1: ‘python‘, 2: ‘hello‘, 0: ‘java‘, ‘key‘: ‘world‘, (11, 22): ‘youxiu‘}
可以删除 del ,可以迭代,默认按照 key 循环,可以用keys(),value()专门输出键和键值
info = { 1: "hello", 1: "heo", 0: "hi", "key": "world", True: "python", # 1 原本对应hello,现在对应python False: "java", # 0 原本对应hi,现在对应java (11, 22): "youxiu", } for item in info: print(item) result: 1 0 key (11, 22)
迭代输出键值对 item()方法
for k,v in info.items(): print(k, v)
集合
集合内元素无序,是可变类型
frozenset()不可变集合
运算符
算术 赋值 运算符结果是数值
比较 逻辑 成员 运算符结果是布尔值
!= ===== <> 不等于
not 非
or 或
and 与
( )提高优先级,先计算括号里面的
支持 +=, -=, *=, /=, **=, %=, //=
in / not in 成员运算符
三、常用语句
输入输出
1. inp = input() 接收的全是字符串,new_inp = int(inp)
2. import getpass
pwd
=
getpass.getpass(
‘请输入密码:‘
)
#隐藏输入密码
3. print(type(a), a) 可行
continue
在循环里跳过某一个输出继续循环
continue跳回循环 break跳出循环
in / not in
name = "魔法少女小圆" # if "小魔" in name: # print(‘OK‘) # else: # print(‘Error‘) #Ctrl + / 批量注释 if "小圆" not in name: print(‘1‘) else: print(‘2‘)
item(循环变量) len()range()
v = range(0, 100, 10) v1 = range(10) for item in v: print(item) for item in v1: print(item)
result:
0
10
20
30
40
50
60
70
80
90
0
1
2
3
4
5
6
7
8
9
test = input(">>>")
print(test)
for item in range(len(test)):
print(test[item])
result:
>>>alex
alex
a
l
e
x
python2 中 range() xrange()
python3 中 range()即有xrange()功能
字符串格式化
name = "Joey" hobby = "music" age = 18 height = 1.75 print(‘I am %.4s, my age is %d,my height id %.2f and I like %s.‘ % (name, age, height, hobby)) # %s 可以是各种类型,但不易区分,可读性差 # .xs可以截取x长度 print("I am %(Name)s, my age is %(Age)d." % {"Name":"Joey","Age":18}) result: I am Joey, my age is 18,my height id 1.75 and I like music. I am Joey, my age is 18.
格式化之前可以添加 -flag 选项,更改输出显示格式
print("root","x","k",sep = ":")
result:
root:x:k
format()字符串格式化
print("I am {}, my age is {}.".format("Joey", 18)) print("I am {1}, my age is {0}.".format(18, "Joey")) print("I am {name}, my age is {age}.".format(name="Joey", age=18)) print("I am {name}, my age is {age}.".format(**{"name": "Joey", "age": 18})) # 字典 print("I am {0[0]}, my age is {1[1]}.".format([0, 1], ["Joey", 18])) print("I am {:s}, my age is {:d}.".format(*["Joey", 18])) # 列表 I = ["Joey", 18] print("I am {}, my age is {}.".format(*I)) print("numbers: {:b}, {:o}, {:d}, {:x}, {:X}, {:%}".format(15, 15, 15, 15, 15, 0.1508762385, 2)) result: I am Joey, my age is 18. I am Joey, my age is 18. I am Joey, my age is 18. I am Joey, my age is 18. I am 0, my age is 18. I am Joey, my age is 18. I am Joey, my age is 18. numbers: 1111, 17, 15, f, F, 15.087624%
四、魔法方法
整型的魔法
在python3里所有的整型都是int型,不区分long,short,长度足够长
1. int() 将字符串转换成数字 (type()方法可以显示类型)
int( num, base=2/8/16 ) 参数base指定原转换数字的类型,默认按照10进制转化
2. bit_length() 字节长度,给出当前数字的二进制至少用几个字节表示
字符串的魔法
1. capitalize() 首字母大写
2. casefold() 适用于更多的大小写转换, lower()只适用于英文字母
3. center( size, ‘*‘ ) size 是总的占位数,必须填写; * 可有可无,必须是一个字符,填充空白
4. count( ‘str’, num1, num2 ) 统计传入字符串 str 在原字符串中的个数;num1 起始位置,num2 结束 位置
5. endwith( ‘str‘ ) 是否以 str 结尾
6. startswith( ’str‘ ) 是否以 str 开头
7. find( ‘str’, num1, num2 ) 从 num1到 num2 寻找,获取第一次出现的位置;[ num1 , num2 ) 左开 右闭
8. format () 格式化输出,{ } 占位符
name1 = ‘I am {name}‘ print(name1) v1 = name1.format(name=‘alex‘) print(v1) test = ‘I am {0}, age:{1}‘ print(test) v = test.format(‘alex‘, 19) print(v)
I am {name} I am alex I am {0}, age:{1} I am alex, age:19
9. format_map() 传入字典
test = ‘I am {name}, age:{a}‘ print(test) v = test.format_map({‘name‘: ‘alex‘, ‘a‘:19}) print(v)
I am {name}, age:{a}
I am alex, age:19
10. index() 与 find()比较,index()找不到报错,find()找不到返回 -1
11. isalnum() Is all number or alphabet ?
12. expandtabs( num ) 以 num 为单位分割,遇 补全为 num 个,制表效果明显
s = "12345678 9" v = s.expandtabs(6) print(v, len(v))
result:
12345678 9 13
test = "username email password xiaoyuan[email protected] 123 xingzi[email protected] 234 shayejia[email protected] 345" v = test.expandtabs(20) print(v)
result:
username email password
xiaoyuan [email protected] 123
xingzi [email protected] 234
shayejia [email protected] 345
13. isalpha() Are they characters ?Not nunbers 字母或汉字
14. isdigit() 更广泛的数字(序号等) isdecimal()阿拉伯数字
15. isidentifier() 字母 数字 下划线 组成的表示符
16. islower() 是否是小写
17. isnumeric() 和 isdigit() 类似,但更厉害,可以识别中文的数字
rmb = "一百万" dollar = "million" print(rmb.isnumeric(), dollar.isnumeric())
result:
True False
18. isprintable() 不能包含 等,字符串均可见,可显示
19. isspace() 是否全是空格
20. istitle() 标题,首字母大写
21. title() 转换成标题
22. join()
test = "唯我超电磁炮永世长存!" print(test) v = " ".join(test) print(v)
result:
唯我超电磁炮永世长存!
唯 我 超 电 磁 炮 永 世 长 存 !
23. ljust() rjust() center()
test = "唯我超电磁炮永世长存!" print(test) v = test.ljust(20, "*") print(v) k = test.rjust(20, "*") print(k)
result:
唯我超电磁炮永世长存!
唯我超电磁炮永世长存!*********
*********唯我超电磁炮永世长存!
24. zfill() 只能填充 0
25. lower() islower() upper() isupper()
26. strip() lstrip() rstrip() 去掉左右的空白和 ,移除指定字符,匹配最大子串
还可以传入参数,去掉指定字符,类似于正则匹配,把传入字符串的字串与原字符串匹配后去掉
27. maketrans() translate() 根据对应关系替换
test = "awioutewhjgwutyuwiouorvsm" m = str.maketrans("aeiou", "12345") new_test = test.translate(m) print(new_test)
result:
1w345t2whjgw5ty5w3454rvsm
28. partition() rpartition() split() rsplit() 作分割,用于设计正则表达式
test = "awioutewhjgwutyuwiouoervsm" v = test.partition(‘e‘) v1 = test.rpartition(‘e‘) print(v) print(v1) #但是 o 得不到 在设计计算器时用partition print(test.split(‘o‘, 1)) print(test.split(‘o‘, 2)) print(test.split(‘o‘, 3)) print(test.rsplit(‘o‘, 1)) print(test.rsplit(‘o‘, 2)) print(test.rsplit(‘o‘, 3))
result:
(‘awiout‘, ‘e‘, ‘whjgwutyuwiouoervsm‘)
(‘awioutewhjgwutyuwiouo‘, ‘e‘, ‘rvsm‘)
[‘awi‘, ‘utewhjgwutyuwiouoervsm‘]
[‘awi‘, ‘utewhjgwutyuwi‘, ‘uoervsm‘]
[‘awi‘, ‘utewhjgwutyuwi‘, ‘u‘, ‘ervsm‘]
[‘awioutewhjgwutyuwiou‘, ‘ervsm‘]
[‘awioutewhjgwutyuwi‘, ‘u‘, ‘ervsm‘]
[‘awi‘, ‘utewhjgwutyuwi‘, ‘u‘, ‘ervsm‘]
补:
value = "5 + 9"
v1, v2 = value.split(‘+‘)
v1 = int(v1)
v2 = int(v2)
v1+v2 --------可以用于计算
29. splitlines() 只能根据换行符分割, 传递参数True 保留换行符,False 不保留换行符
30. startwith() endswith() 开头结尾
31. swapcase() 大小写转换
32. replace( “ 被替换字符串 ”, “替换字符串” , num ) num 从头开始替换个数
列表的魔法
1. append()
li = [] v = li.append([3, ["hahaha", 324]]) #最后追加一个元素 print(v) print(li) result: None [[3, [‘hahaha‘, 324]]]
2. clear() 清空
3. copy() 浅拷贝
4. count( value ) 查找出现次数
5. extend( iterable ) iterable 可迭代对象, 追加一个列表里的所有元素,扩展原列表
li = [12,23,34] li.extend(["hello"]) print(li) li.extend("world") print(li) result: [12, 23, 34, ‘hello‘] [12, 23, 34, ‘hello‘, ‘w‘, ‘o‘, ‘r‘, ‘l‘, ‘d‘]
6. index() 获取第一个索引位置
7. insert( index ) 插入值
8. pop( index ) 弹出,默认最后一个
9. remove( value ) 删除第一个 value
ps:pop remove del clear 删除
10. reverse() 反转
11. sort( reverse=True/False) 排序(正序或逆序)
元组的魔法
1. count() 获取指定元素在元组中出现的次数
2. index( value,start,end ) 获取指定元素的索引
字典的魔法
1. clear()
2. copy() 浅拷贝
3. fromkeys( keys,values ) 静态方法
4. get( key,defualt_value ) 默认没找到返回 0
5. pop( key,defualt_value ) 弹出 key de value,未找到返回 defualt_value
6. popitem() 弹出一对键值,用两个变量接收
7. setdefualt ( key ,value ) 设置值 如果 key 有的话, value
8. update( key1=value1, key2=value2 ) 更新值
9. keys()values()items()
集合的魔法
1. add() 添加元素,只能添加一个
2. clear() 清空元素
3. copy() 拷贝
4. pop() 弹出
5. remove() 删除指定元素,不存在报错
6. discard() 删除指定元素,不存在跳过
7. set() 扔进集合里,可以去重,但丢失了顺序
集合运算
8. intersection() 求交集 & (没有+)
9. union() 求并集 |
10. difference() 求差集 -
11. symmetric_difference() 求交叉补集 ^
12. difference_update
13. intersection_update()
14. isdisjoint() 判断是否有交集
15. issubset() 是否是子集 <=
16. issuperset() 是否是父集 >=
17. update() 更新元素,更新多个值,可以传入元组,列表
ps: & | ^ - > >= < <= (没有 + )
五、练习
用户登陆(三次机会重试)
1 #!/urs/bin python3.6 2 3 count = 0 4 while count < 3: 5 user = input(‘>>>‘) 6 pwd = input(‘>>>‘) 7 if user == ‘alex‘ and pwd == ‘123‘: 8 print(‘欢迎登录‘) 9 print(‘...........‘) 10 break 11 else: 12 print(‘用户名或密码错误‘) 13 count += 1
以上是关于Python基础的主要内容,如果未能解决你的问题,请参考以下文章