佛曰:
写字楼里写字间,写字间里程序员;
程序人员写程序,又拿程序换酒钱。
酒醒只在网上坐,酒醉还来网下眠;
酒醉酒醒日复日,网上网下年复年。
但愿老死电脑间,不愿鞠躬老板前;
奔驰宝马贵者趣,公交自行程序员。
别人笑我忒疯癫,我笑自己命太贱;
不见满街漂亮妹,哪个归得程序员?
噢耶!!!
一、基础入门
1 注释
"""
多行注释
"""
2 变量
①变量的分类和声明
在python中,只要定义了一个变量,而且它有数据,那么它的类型就已经确定了,不需要咱们开发者主动的
去说明它的类型,系统会自动辨别。也就是说在使用的时候,变量没有类型,数据才有类型。
a = 20
b = 12.0
②type()查看变量的数据类型
a = 20
b = 20.0
c = 1 + 5j
d = 'hello world'
e = True
print(type(a))
print(type(b))
print(type(c))
print(type(d))
print(type(e))
③命名规范
-
标识符由字母、下划线和数字组成,且数字不能开头。 -
严格区分大小写。 -
不能使用关键字。
Python的命令规则遵循PEP8标准 - 用下划线“_”来连接所有的单词,比如send_buf.
④关键字
⑤类型转换
常用的几个
补充:chr():将整数转换为该编码对应的字符串(一个字符)
?
? ord():将字符串(一个字符)转换为对应的编码(整数)
代码演示
a = '2'
b = 30
c = 1
d = ""
l = (29, 230, 23)
f = '[20, 34, 25, 342]'
print(eval(f))
print(list(l))
print(int(a))
print(float(a))
print(str(b))
print(bool(c))
print(chr(b))
print(ord(d))
?
3 运算符
python的是逻辑与、逻辑非和逻辑非分别是and、or、not
三目元算符(三元运算符)
值1 if 表达式 else 值2 --> 如果if里面是true就输出值1,相反输出值2
print('aaa') if 1 == 1 else print('23243')
二、流程控制语句
python没有switch
1 for和range
range 可以生成数字供 for 循环遍历,它可以传递三个参数,分别表示 起始、结束和步长
- 起始值默认为0
- 步长为负数是递减,正数是递增
- 步长默认为1
- 不包括结束值,比如 起始0、结束10,那么就是循环9次
代码演示
for x in range(0, 10):
print(x)
练习
"""
*
**
***
****
*****
"""
row = int(input("请输入行数"))
for i in range(row):
for j in range(i + 1):
print('*', end='')
print()
'''
*
**
***
****
*****
'''
row = int(input("请输入行数"))
for i in range(row):
for j in range(row - 1 - i):
print(" ", end='')
for j in range(i + 1):
print("*", end='')
print()
"""
*
***
*****
*******
*********
"""
row = int(input("请输入行数"))
for i in range(row):
for _ in range(row - 1 - i):
print(' ', end='')
for _ in range(2 * i - 1):
print('*', end='')
print()
2 while
a = True
b = 1000
c = 1
while(a):
if c > b:
print('程序结束')
break
print(c)
c += 1
三、高级数据类型
1 字符串
① 字符串的写法
str = "孔某是傻逼"
str2 = """
孔某是某靓仔智的儿子
孔某本身也是个傻逼
"""
print(str)
print(str2)
字符串中使用\ (反斜杠)来表示转义
例如:\n 不是代表反斜杠和字符n,而是表示换行;而\t 也不是代表反斜杠和字符t,而是表示制表符。所以如果想在字符串中表示' 要写成\' ,同理想表示\ 要写成\\ 。
str3 = '\'helloWorld\''
str4 = '\\helloWorld\\'
print(str3)
print(str4)
在\ 后面还可以跟一个八进制或者十六进制数来表示字符
例如:\141 和\x61 都代表小写字母a ,前者是八进制的表示法,后者是十六进制的表示法。也可以在\ 后面跟Unicode字符编码来表示字符,例如\u5c0f\u667a 代表的是中文“小智”。
str5 = '\141\142\143\x61\x62\x63'
str6 = '\u5c0f\u667a'
print(str5, str6)
在字符串前面加r,\ 就不会转义
str7 = r'\'abcd\''
str8 = r'\n\\'
print(str7, str8,end='')
② 字符串的运算符
+ 运算符来实现字符串的拼接* 运算符来重复一个字符串的内容,in 和not in 来判断一个字符串是否包含另外一个字符串(成员运算),[] 和[:] 运算符从字符串取出某个字符或某些字符(切片运算)
代码演示
str = 'hello'
str2 = 'world'
str3 = str + str2
print(str3)
boo1 = 'he' in str
boo2 = 'si' in str
print(boo1, boo2)
str4 = 'asfdsfsd'
print(str4[2])
print(str4[2:4])
print(str4[2::4])
print(str4[::2])
print(str4[6::-3])
print(str4[-4:-1])
③ 格式化输出字符串
a, b = 5, 10
print('%d * %d = %d' % (a, b, a * b))
a, b = 5, 10
print('{0} * {1} = {2}'.format(a, b, a * b))
a, b = 5, 10
print(f'{a} * {b} = {a * b}')
④ 字符串函数的使用
str = 'hello,world'
print(len(str))
print(str.capitalize())
print(str.title())
print(str.upper())
print(str.lower())
print(str.find('or'))
print(str.find('str'))
print(str.count('o'))
print(str.count('o', 1, 5))
print(str.startswith('He'))
print(str.startswith('hel'))
print(str.startswith('hel', 0, 3))
print(str.endswith('he'))
print(str.endswith('world'))
print(str.center(20, '*'))
print(str.rjust(20, '*'))
print(str.ljust(20, '*'))
str2 = 'abc123456'
print(str2.isdigit())
print(str2.isalpha())
print(str2.isalnum())
str3 = ' 23423 @qq.com '
print(str3.strip())
print(str3.lstrip())
print(str3.rstrip())
print(str3.replace('234', '113', 2))
list1 = str3.split(' ')
print('-'.join(list1))
str4 = ' '
print(str4.isspace())
print(str.isspace())
2 列表
就是数组
01 快速入门
salary = [1000, 20000, 3000, 50000]
length = len(salary)
for index in range(length):
print(salary[index])
for elem in salary:
print(elem)
for index, elem in enumerate(salary):
print(index, elem)
补充:
list2 = salary * 2
print(list2)
02 列表的增删改查
① 添加和插入
list = [2, 34, 22, 54]
list.append('理解')
list.insert(12, '小智')
for elem in list:
print(elem)
② 合并
list = [1, 34, 35, 32]
list2 = [3, 343, 22, 21]
list.extend(list2)
list2 += [34, 23, 34]
print(list)
print(list2)
③ 删除
list = [1, 2, 3, 4, 4, 3]
if 4 in list:
list.remove(4)
if 1234 in list:
list.remove(1234)
print(list)
list.pop(3)
print(list)
list.clear()
print(len(list))
④ 切片
list1 = ['xiaozhi', 'heigui', 'goumo','niuniu']
print(list1[1::])
print(list1[::-3])
print(list1[1:4:2])
print(list1[-3:3:1])
03 列表的排序
list1 = [23, 34, 22223, 2]
list1.sort()
list11 = [23, 34, 22223, 2]
list11.sort(reverse=True)
print(list1)
print(list11)
list2 = ['yasdff', 'bcsdf', 'yadf', 'sdfsdfsd']
list3 = sorted(list2)
list4 = sorted(list2, key=len)
list5 = sorted(list2, reverse=True)
print(list3)
print(list4)
print(list5)
04 生成式和生成器
import sys
f1 = [ x for x in range(1, 10)]
print(f1)
f2 = [x + y for x in 'ABCDE' for y in '1234567']
print(f2)
f3 = [x ** 2 for x in range(1, 1000)]
print(f3)
print(sys.getsizeof(f3))
05 斐波拉切数列
通过yield 关键字将一个普通函数改造成生成器函数
def fib(n):
a, b = 0, 1
for _ in range(n):
a, b = b, a + b
yield a
def main():
for val in fib(20):
print(val)
if __name__ == '__main__':
main()
3 元组
元祖的使用方式和列表是类似的,但是不同的是元祖不能修改,列表是可以修改的,元祖使用小括号,列表使用方括号
代码实现
t = ('小智', 18, True, '广东')
print(t)
print(t[0])
print(t[3])
for elem in t:
print(elem)
print(type(t))
print(type(list(t)))
f_list = ['service', 'yoy', 'got']
print(type(tuple(f_list)))
元组列表的比较
-
元组不能修改,所以如果需要固定数据的话可以使用元组 -
元组的占用内存是比列表要少的 # 元组和列表的比较
import sys
t = (1, 2, 3)
l = [1, 2, 3]
# 列表的内存时比元组占用的要多
print(sys.getsizeof(t)) # 72
print(sys.getsizeof(l)) # 88
-
元组如果修改的话会报错,这个要注意一下
4 集合
Python中的集合跟数学上的集合是一致的,不允许有重复元素,而且可以进行交集、并集、差集等运算。
集合是无序的,所以不能通过下角标来取值,同时还去重
①入门
set1 = {1, 3, 32, 2, 3}
print(set1)
print('Length=', len(set1))
set2 = set(range(1, 10))
set3 = set((1, 2, 3, 4))
print(set2, set3)
set4 = {num for num in range(1, 100) if num % 3 == 0 or num % 5 == 0}
print(set4)
②添加和删除
set1 = {1, 3, 32, 2, 3}
set1.add('4')
set1.update([11, 12])
print(set1)
print(set1.pop())
set1.remove(1)
set1.discard(3)
if 4 in set1:
set1.remove(4)
print(set1)
③交集并集差集运算
set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}
set3 = {1, 2}
print(set1 & set2)
print(set1.intersection(set2))
print(set1 | set2)
print(set1.union(set2))
print(set1 - set2)
print(set1.difference(set2))
print(set1 ^ set2)
print(set1.symmetric_difference(set2))
print(set1 >= set2)
print(set3 <= set1)
5 字典
键值对容器,类似java的map集合,键和值用’:'隔开
student = {'01': '小黑', '02': '黑仔', '03': '傻逼孔'}
print(student)
student2 = dict(one='小智', two='小锋', three='小黑')
print(student2)
student3 = dict(zip(['a', 'b', 'c'], '123'))
print(student3)
print(student['01'])
print(student.get('02'))
for key in student:
print(f'{key}, {student[key]}')
print('{0},{1}'.format(key, student[key]))
print('%s %s' % (key, student[key]))
if '01' in student:
print(student['01'])
student['01'] = '黑鬼'
print(student['01'])
a = student.pop('01')
print(student, a)
print(student.popitem())
student2.clear()
print(student2)
四、函数和模块的使用
01 快速入门
函数的作用就是将重复使用的东西封住起来,使用的时候直接调函数
python中用def关键字定义函数,括号里面是形参,return关键字返回一个值,函数的命名规则和变量名一样
代码演示
def fac(num):
result = 1
for n in range(1, num + 1):
result *= n
return result
print(fac(3))
02 函数的参数
python 不支持重载,但是它有替代重载的方案
代码演示
from random import randint
def roll_dice(n=2):
"""摇色子"""
total = 0
for _ in range(n):
total += randint(1, 6)
return total
def add(a=0, b=0, c=0):
"""三个数相加"""
return a + b + c
def add2(a, b):
return a + b
print(roll_dice())
print(roll_dice(3))
print(add())
print(add(1))
print(add(1, 2))
print(add(1, 2, 3))
print(add(c=50, a=100, b=200))
print(add2())
注意:如果不传入对应的参数就会使用函数默认的参数,前提是定义的参数它是有默认值的,否者就会报错
可变形参
可变形参时元组类型
# 可变形参
def add(*args):
total = 0
for n in args:
total += n
return total
print(add(1, 2, 3, 4, 5))
03 模块化管理
python是没有重载的,所以如果存在两个重名的函数,后面定义的会覆盖前面定义的,所以如果想要起两个同名的参数,那么我们就需要模块化管理,python中每个文件就代表了一个模块
module1.py
def foo():
print("我是moduler1中的foo")
module2.py
def foo():
print("我是moduler2中的foo")
test.py
from module1 import foo
foo()
from module2 import foo
foo()
from module1 import foo
from module2 import foo
foo()
也可以通过起别名的方式来区分
test.py
from module1 as m1
from module1 as m2
m1.foo()
m2.foo()
04 全局变量和局部变量
函数外的就是全局,函数内的就是局部
def foo():
b = 'hello'
def bar():
c = True
print(a)
print(b)
print(c)
bar()
if __name__ == '__main__':
a = 100
foo()
局部变量内修改全局变量
def foo():
global a
a = 200
print(a)
if __name__ == '__main__':
a = 100
foo()
print(a)
05 函数帮助文档
help(想知道的方法):得到对应方法的帮助文档
五、面向对象
注意:后导入的会覆盖前导入的
from module1 import foo from module2 import foo
foo() # 我是moduler2中的foo
也可以通过起别名的方式来区分
```python
test.py
# 模块化测试
from module1 as m1
from module1 as m2
m1.foo()
m2.foo()
04 全局变量和局部变量
函数外的就是全局,函数内的就是局部
def foo():
b = 'hello'
def bar():
c = True
print(a)
print(b)
print(c)
bar()
if __name__ == '__main__':
a = 100
foo()
局部变量内修改全局变量
def foo():
global a
a = 200
print(a)
if __name__ == '__main__':
a = 100
foo()
print(a)
05 函数帮助文档
help(想知道的方法):得到对应方法的帮助文档
五、面向对象
|