Python 基础
# %% [markdown]
# # <center><font face="仿宋" color=blue size=30>Python基础</font></center>
# ## <center><font face="楷体" color=purple>黄俊人</font></center>
# ### 一、变量
# #### 1. 一种会变化的状态,这个状态可以描述世间万物
# #### 2. Python中定义变量
# %%
name='Jason' # 变量名、赋值符号、变量值
print(name) # 变量名做了什么事情:接收了变量值
# %%
print('Jason')
# %% [markdown]
# #### 3.定义变量名的命名规范
# 1. 变量名应当具有某种意义
# 2. 变量名只能使用字母、数字、下划线,并且第一个字符不能是数字(也不能是下划线)
# ```
# + = 1 #报错
# ```
# 3. 不能使用关键字
# + 关键字:一个单词具有某种意义 #print
# + 语法:一句话具有某种意义 #print('Jason')
# ['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']
# 4. 两种定义变量名的方式
# + 下划线:age_of_jason (下划线用来区分单词)
# %%
age_of_jason = 19
print(age_of_jason)
# %% [markdown]
# + 驼峰体:AgeOfJason(不建议使用)
# %%
AgeOfJason = 19
print(AgeOfJason)
# %% [markdown]
# ### 二、常量
# #### 1. 固定不变的量
# %%
huangjunren_height = 180
huangjunren_height = huangjunren_height+10
print(huangjunren_height)
# %% [markdown]
# #### 2.定义常量
# + 因为变量是变化的量,常量则是不变的量。python中没有使用语法强制定义常量,也就是说,python中定义常量本质上就是变量。如果非要定义常量,变量名必须全大写。
# %%
AGE_OF_JASON = 19
AGE_OF_JASON = AGE_OF_JASON + 1
print(AGE_OF_JASON)
# %% [markdown]
# #### 3. 注释
# + 有些代码你花了很久写出来,过了些天再回去看,发现竟然看不懂了;一个项目多是由几个甚至几十个开发人员一起做,你要调用别人写的代码,别人也要用你的,如果代码不加注释,你自己都看不懂,更别说别人了,这产会挨打的。所以为了避免这种尴尬的事情发生,一定要增加你代码的可读性。
# + 代码注释分单行和多行注释,单行注释用#,多行注释可以用三对单/双引号,使用三引号注释可以换行。
# + 添加注释的原则:1.不用全部加注释,只需要在自己觉得重要或不好理解的部分加注释即可2.注释可以用中文或英文,但不要用拼音
# %%
# 单行注释
'''
三单引号注释
三单引号注释
'''
"""
三双引号多行注释
三双引号多行注释
"""
# %%
name = 'huangjunren'
height = 190 # 身高
wight = 180 # 体重
# %% [markdown]
# ### 三、内存管理
# #### 1.看Python如何在内存中创建变量
# + 定义变量名就是在开辟内存空间
# #### 2 引用计数
# + 引用是针对变量值的
# %%
name = 'Jason' #引用计数为1,即这个变量值被引用多少次
name2 = name #'Jason'的引用计数为2
name1 = 'Jason1'
del name #'Jason'的引用计数为1
del name2 #'Jason'的引用计数为0
# %% [markdown]
# #### 3.垃圾回收机制
# + 当变量值的引用计数为0的时候,Python会自动回收该变量值的内存占用
# %%
print ('Jason')
'''
name ="Jason"
print (name)
del name
内存内部是这样运行的
'''
# %% [markdown]
# #### 4.小整数池
# + [-5,256]之间的整数由于经常用到,所以在Python启动的那一刻,就会开辟一块内存空间放入这些整数,他们不会被垃圾回收机制回收(Python提供)
# %%
x = 10
y = 10
print(x+10)
print(y+10)
#x=10的10引用计数其实为2
# %% [markdown]
# + 时间短,并且占用内存比较小,会把他们放在同一块内存中(jupyter和pycharm提供)
# %%
name1 = '1234'
id(name1)
# %%
name2 = '1234'
id(name2)
# %% [markdown]
# ### 四、数据类型介绍
# + 不同的数据会有不同的数据类型
# + 未来定义不同的数据,Python中提供了下述几个数据类型:
# #### 1.数字类型
# ##### 1.1整型
# 1. 作用:描述ID号、银行卡号
# 2. 定义方式:如下代码(变量名=变量值)
# 3. 方法:+-*/%
# %%
height = 180 #180为整型
# %% [markdown]
# ##### 1.2浮点型
# 1. 作用:薪资(3.2万)、商品价格
# 2. 定义方式:如下代码
# 3. 方法:+-*/%
# %%
salary = 32.2
# %% [markdown]
# #### 2.字符串类型
# ##### 2.1作用:表示名字、爱好
# ##### 2.2定义方式:如下代码(字符串相当于一根羊肉串。而字符串就是一串被串起来的字符,在单引号、双引号或三引号内包裹的一串字符。需要注意的是:三引号内的字符可以换行,而单双引号内的字符不行。)
# %%
name1 = 'jason'
name2 = "jay"
print(id(name1))
print(type(name1))
print(name1)
name3 = """jason
jay"""
print(name3)
# 注意区分注释与字符串
# %% [markdown]
# ##### 2.3用法
# + 字符串只能+、*和逻辑比较(字符串的拼接,即重新申请一个小空间把两个字符串都拷贝一份后再拼接。而不是你YY的把一个小空间内的变量值复制到另一个变量的小空间内,然后拼接。)
#
# %%
name = 'jason'
height = '180'
weight = '140'
name+height+weight
# %% [markdown]
# + 注意: **字符串不能与数字相加,但是可以与数字相乘**
# %%
name='jason'
print(name*2)
# %%
name = 'jason'
height = 180
name+height
# %% [markdown]
# + 注意:如果字符串内有引号,则包裹字符串的引号和字符串内部的引号不能相同。
# %%
msg2 = "my name is 'jason'"
msg3 = 'my name is "jason"'
print(msg2 + msg3) # my name is 'jason'my name is "jason"
# %% [markdown]
# + 注意:字符串的乘法只能乘以数字。
# %%
name = 'jason '
print(name * 10)
# %% [markdown]
# #### 3.列表
# + 定义方式:在[]内用逗号分隔开任意类型的值。
# %%
hobby_list = ['read', 'run', 'girl']
# 索引序号 0 1 2
# 取出第二个爱好
print(hobby_list[1])
# %%
hobby_list = ['read', 'run', ['girl_name', 18, 'shanghai']]
# 取出girl的年龄
print(hobby_list[2][1])
# %% [markdown]
# #### 4.字典
# + 定义方式:在{}内用逗号分隔开多个元素,每一个元素都是key: value的格式,其中value是任意格式的数据类型,key由于具有描述性的作用,所以key通常是字符串类型。
# %%
# 字典套列表
user_info = {'name': 'jason', 'gender': 'male', 'age': 24,
'company_info': ['oldboy', 'zhongqing', 50]}
print(user_info['name'])
print(user_info['company_info'][0])
# %%
# 字典套字典
user_info = {'name': 'jason', 'gender': 'male', 'age': 24, 'company_info': {
'c_name': 'oldboy', 'c_addr': 'chongqing', 'c_num_of_employee': 50}}
print(user_info['name'])
print(user_info['company_info']['c_addr'])
# %%
students = [
{'name': 'nick', 'age': 19},
{'name': 'egon', 'age': 18}
]
print(students[0]['name'])
# %% [markdown]
# #### 5.布尔数据类型
# + 注意:布尔类型一般不用于打印、定义变量,除了0、None、空、False都自带布尔值为True
# + True or False
# %%
print(bool(0))
print(bool(None))
print(bool(''))
print(bool([]))
print(bool({}))
print(bool(False))
# %%
print(bool(0))
print(bool('nick'))
print(bool(1 > 2))
print(bool(1 == 1))
# %% [markdown]
#
# #### 6.变量的三个特征
# %%
x = 10
print(x) # 获取变量的变量值
print(id(x)) # 获取变量的id,可以理解成变量在内存中的地址
print(type(x)) # 获取变量的数据类型,下章会详细介绍数据类型
# %% [markdown]
# ### 五、Python的与用户交互
# %%
input('请插入银行卡')
input('请输入密码')
# %% [markdown]
# + input只是为了做一个过渡阶段,无论输入的是什么,input接受的的都是字符串
# %%
vip_card = input('请插入银行卡')
print(vip_card)
print(id(vip_card))
print(type(vip_card))
# %%
age = input('请输入你的年龄:')
print(age)
age = int(age) #因为字符不能与数字相加,因此将字符转化为数字
print(type(age))
age = age + 1
print(age)
# %% [markdown]
# ### 六、格式化输入
# %%
name=input('name:')
age=input('age=')
height=input('height:')
print('My name is',name,',My age is',age,',My height is',height)
# %%
name=input('name:')
print('My name is '+name) #加号与逗号都可以
# %% [markdown]
# #### 1.占位符
# + %s(针对所有数据类型)、%d(仅仅针对数字类型)
# %%
name=input('name:')
age=input('age=')
height=input('height:')
print('My name is %s,My age is %s,My height is %s'%(name,age,height))
# %%
name=input('name:')
name=int(name)
age=input('age=')
age=int(age)
height=input('height:')
height=int(height) #这两行可以表示为height_int=int(input('height:'))
print('My name is',name,',My age is',age,',My height is',height)
# %% [markdown]
# #### 2.f-string格式化(推荐)
# %%
name=input('name:')
age=input('age=')
height=input('height:')
print(f'My name is {name},My age is {age},My height is {height}')
# %%
print(f'My name is {name},My age is {int(age)+1:.2f},My height is {height*2}') #:.2f表示保留两位小数
# %% [markdown]
# ### 七、基本运算符(含解压缩)
# #### 1.算术运算符
# + <a href="https://imgse.com/i/pk5olZV"><img src="https://s21.ax1x.com/2024/07/15/pk5olZV.md.png" alt="pk5olZV.png" border="0" width="1000" height="500"/></a>
# %% [markdown]
# #### 2.比较运算符
# + <a href="https://imgse.com/i/pk5ouMn"><img src="https://s21.ax1x.com/2024/07/15/pk5ouMn.md.png" alt="pk5ouMn.png" border="0" width="1000" height="500"/></a>
# %% [markdown]
# #### 3.赋值运算符
# + <a href="https://imgse.com/i/pk5omxs"><img src="https://s21.ax1x.com/2024/07/15/pk5omxs.md.png" alt="pk5omxs.png" border="0" width="1000" height="500"/></a>
# %% [markdown]
# #### 4.逻辑运算符
# + <a href="https://imgse.com/i/pk5oe2j"><img src="https://s21.ax1x.com/2024/07/15/pk5oe2j.md.png" alt="pk5oe2j.png" border="0" width="1000" height="200"/></a>
# %%
1<=1 and 1>=1
# %%
not '小花很美'
# %% [markdown]
# #### 5.身份运算符
# + <a href="https://imgse.com/i/pk5oMq0"><img src="https://s21.ax1x.com/2024/07/15/pk5oMq0.md.png" alt="pk5oMq0.png" border="0" width="1000" height="200"/></a>
# + **id相同的值一定相同,值相同的id不一定相同,小整数池除外**
# %%
x=10
y=10
print(x is y)
print(x == y)
# %%
x=257
y=257
print(x is y)
print(x == y)
# %%
x=11
y=10
print(x is y)
print(x == y)
# %% [markdown]
# #### 6.位运算符
# + <a href="https://imgse.com/i/pk5oKrq"><img src="https://s21.ax1x.com/2024/07/15/pk5oKrq.md.png" alt="pk5oKrq.png" border="0" width="1000" height="500"/></a>
# %% [markdown]
# #### 7.成员运算符
# + <a href="https://imgse.com/i/pk5oZGQ"><img src="https://s21.ax1x.com/2024/07/15/pk5oZGQ.md.png" alt="pk5oZGQ.png" border="0" width="1000" height="150"/></a>
# %% [markdown]
# #### 8.链式赋值
# %%
x=y=z=10
print(x,y,z)
# %% [markdown]
# #### 9.交叉赋值
# %%
x=10
y=20
z=x # x=z=10
x=y # x=y=20
y=z # y=z=10
print(x,y)
# %%
x=10
y=20
x,y=y,x
print(x,y)
# %% [markdown]
# #### 10.解压缩
# %%
hobby_list = ['read','run','piano',123,456,789]
hobby1,hobby2,_,_,_,_ = hobby_list
print(hobby1,hobby2)
print(_) # _表示赋值的数据不要了,有多个_的情况下,
# %%
hobby_list = ['read','run','piano',123,456,789]
hobby1,hobby2,*_ = hobby_list # *_只能用在省略中间所有或者前后所有的值
print(hobby1,hobby2)
print(_) # *_表示所有它所代表的值
# %%
hobby_list = ['read','run','piano',123,456,789]
hobby1,hobby2,*a = hobby_list # *_只能用在省略中间所有或者前后所有的值
print(hobby1,hobby2)
print(a) # *_表示所有它所代表的值
# %% [markdown]
# ### 八、流程控制之if判断
# #### 1.if
# %%
if 条件的bool值为True:
代码1
代码2
代码3
...
# 代码块(同一缩进级别的代码,例如代码1、代码2和代码3是相同缩进的代码,
# 这三个代码组合在一起就是一个代码块,相同缩进的代码会自上而下的运行)
# %%
name = input('请输入你的名字:')
if name =='jason':
print('你好帅,我喜欢你')
# %% [markdown]
# #### 2.if...else
# %%
if 条件:
代码1
代码2
代码3
...
else:
代码1
代码2
代码3
...
# %%
name = input('请输入你的名字:')
if name =='jason':
print('你好帅,我喜欢你')
else:
print('你走吧,你不是他')
# %% [markdown]
# #### 3.if...elif...else
# %%
if 条件1为True:
代码1
代码2
代码3
...
elif 条件2为True:
代码1
代码2
代码3
...
elif 条件3为True:
代码1
代码2
代码3
...
...
else:
代码1
代码2
代码3
...
# %%
age_jason = 24
age = int(input('请输入你猜的年龄:'))
if age == age_jason:
print('\033[1;31m恭喜你,猜对了\033[0m')
elif age > age_jason:
print('猜大了,傻逼')
else:
print('猜小了,傻逼')
# %% [markdown]
# ### 九、流程控制之while循环
# %%
while 条件为True:
代码块
代码块
代码块
# %%
while 1:
age_jason = 24
age = int(input('请输入你猜的年龄:'))
if age == age_jason:
print('\033[1;31m恭喜你,猜对了\033[0m')
elif age > age_jason:
print('猜大了,傻逼')
else:
print('猜小了,傻逼')
# %% [markdown]
# #### 2.while+break
# %%
while 1:
age_jason = 24
age = int(input('请输入你猜的年龄:'))
if age == age_jason:
print('\033[1;31m恭喜你,猜对了\033[0m')
break
elif age > age_jason:
print('猜大了,傻逼')
else:
print('猜小了,傻逼')
print('我跳出while循环了')
# %% [markdown]
# #### 3.while循环的嵌套
# %%
prize = {0:'dragon ball',1:'basketball',2:'phone'}
while 1:
age_jason = 24
age = int(input('请输入你猜的年龄:'))
if age == age_jason:
print(f'\033[1;31m恭喜你,猜对了\n你可以从下面的奖品中选择一个\n{prize}\033[0m')
while True:
choice = int(input('请输入你想要的奖品序号:'))
if choice == 0:
print('快睡觉吧,梦里有')
elif choice == 1:
print('行吧,这个可以有')
break
else :
print('想什么呢,还想要手机?')
break
elif age > age_jason:
print('猜大了,傻逼')
else:
print('猜小了,傻逼')
# %% [markdown]
# #### 4.while + continue
# %%
count = 1
while count < 101: # 1<101,2<101,count=50
if count == 50 :
count += 1
continue #不执行下面代码
print(count) #1、2
count += 1
# %% [markdown]
# + 总结:break-直接终止整个while循环;continue-只是不执行下面的代码,但是会循环下去
# %% [markdown]
# ### 十、流程控制之for循环
# %%
game_list = ['lol','cs','暖雪','金铲铲','nizhan','wangzherongyao']
# 0 1 2 3 4 5
ind = 0
while ind < 6 :
print(game_list[ind])
ind += 1
# %%
for i in game_list:
print(i)
"""
for循环就等于上面的while循环:ind = 0
while ind < 6 :
print(game_list[ind])
ind += 1
"""
# %%
for i in 列表 or 字典:
i就是列表中的每一个元素 # 第二行要有缩进
# %% [markdown]
# #### 1.for + break
# %%
game_list = ['lol','cs','暖雪','金铲铲','nizhan','wangzherongyao']
# 0 1 2 3 4 5
for i in game_list:
if i == '金铲铲' :
break
print(i)
# %% [markdown]
# #### 2.for + continue
# %%
game_list = ['lol','cs','暖雪','金铲铲','nizhan','wangzherongyao']
# 0 1 2 3 4 5
for i in game_list:
if i == '金铲铲' :
continue
print(i)
# %% [markdown]
# #### 3.for嵌套
# %%
for i in range(3): # range(3)=[0,1,2]
print(f'----:{i}')
for j in range(2):
print(f'****:{j}')
# %% [markdown]
# #### 4. 打印出loading......
# %%
import time # 让.延迟出现
print('loading',end='') # 源代码为,end='/n' ,这里用空白取消换行
for i in range(6) :
print('.',end='')
time.sleep(0.5) # 让.延迟出现
# %% [markdown]
# ### 十一、leetcode
# %% [markdown]
# + 进入力扣网站→题库→算法→难度:简单
浙公网安备 33010602011771号