python流程控制
一、 while循环
while 无限循环
while 循环的结构:
while 条件:
循环体
如何终止循环?
1,改变条件 (标志位flag的概念)
2, break 终止循环。
flag = True
while flag:
print('我的滑板鞋')
print('忐忑')
flag = False
print('茉莉花')
print('老司机带带我')
练习 打印出 1 ---100
方法1:
flag = True count = 1 while flag: print(count) count = count + 1 if count == 101: flag = False
方法2:
count = 1 while count < 101: print(count) count = count + 1
break 循环中只要遇到break 立马结束循环。
while True: print(111) print(222) break print(333) print(444) print(123) # 111 222 123
利用break,while, 计算 1 + 2 + 3 ....100 的结果
count = 1 sum = 0 while True: sum = sum + count count = count + 1 if count == 101: break print(sum) #5050
continue: 结束本次循环,继续下一次循环。
while True: # 无线循环输出111 222 print(111) print(222) continue print(333)
while else 结构
如果while循环被break打断,则不执行else代码。若没有被break打断则执行else代码。
count = 1 while count < 5: print(count) count = count + 1 if count == 3: break else: print(666) print(222) # 1 2 222
应用场景:
验证用户名密码,重新输入这个功能需要while循环。
无限次的显示页面,无限次的输入......
二、 格式化输出
制作一个模板,某些位置的参数是动态的,像这样,就需要用格式化输出。
字符串的动态替换
% 占位符 ,s 数据类型为字符串, d为数字类型
name = input('请输入姓名:')
age = int(input('请输入年龄:'))
sex = input('请输入性别:')
第一种方式:
msg = '你的名字是%s,你的年龄%d,你的性别%s' % (name,age,sex)
print(msg)
第二种方式
msg = '你的名字是%(name1)s,你的年龄%(age1)d,你的性别%(sex1)s' % {'name1':name,'age1':age,'sex1':sex}
print(msg)
bug 点 在格式化输出中,只想单纯的表示一个%时,应该用%% 表示
msg = '我叫%s,今年%d,我的学习进度1%%' % ('关亮和',28)
print(msg)
三、 运算符
== 比较的两边的值是否相等
= 赋值运算
!= 不等于
+= 举例: count = count + 1 简写 count += 1
-=
*= : count = count * 5 简写 count *= 5
/=
**=
//=
逻辑运算符:and or not
优先级:()> not > and > or
第一种情况,前后条件为比较运算
print(1 < 2 or 3 > 1) print(1 < 2 and 3 > 4) print(1 < 2 and 3 > 4 or 8 < 6 and 9 > 5 or 7 > 2) print(1 > 2 and 3 < 4 or 4 > 5 and 2 > 1 or 9 < 8) print(1 > 1 and 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6) #结果: #True #False #True #False #False
第二种情况,前后两边的条件为数值
x or y , x为真,值就是x,x为假,值是y
x and y, x为真,值是y,x为假,值是x
print(1 or 2) print(1 and 2) print(5 or 2) print(5 and 2) print(0 or 2) print(-1 or 2) #结果: #1 #2 #5 #2 #2 #-1
补充
int --- > bool
0 对应的bool值为False,非0(包括负数)都是True.
bool --- > int
True对应的数值是1 ,False对应的数值是0
print(bool(100))
print(bool(-1))
print(bool(0))
print(int(True))
print(int(False))
结果:
True
True
False
1
0
print(0 or 3 and 5 or 4) --> 5
四、 编码初识(以下ASCII等编码代表的字符我乱写的,只是用于解释,想看真正的编码代表的意思可自行百度)
以前战争时期要发一些信息的时候,一般就用电报,“滴滴滴”这样发过去,那对方是怎么知道这些“滴滴滴”是什么意思呢?
数据的传输最终都是转换成高低电平的形式,高低电平就用1和0表示。
比如一个叫小明的人要发一段信息给一个叫沙比的人,内容如下:
小明: 今晚吃鸡!
今:0101
晚:010
吃:010001
鸡:01111
按照这样发过去的信息为:010101001000101111
沙比看到肯定一脸懵逼,表示看不懂,所以为了能让沙比看懂,就要制定一系列的规则,主要是:
1、断位:规定多少个数字断一次位
2、密码本:记录明文与二进制的对应关系。
规范之后,小明发给沙比的信息就应该改变一下:
今:0101 0001
晚:0101 1101
吃:0101 0001
鸡:0111 1100
那沙比收到就是01010001 01011101 01010001 01111100 他会按照之前规定的多少个数字断位一次,每个数字的组合代表什么意思就从密码本上
查看,那样就可以实现通信了。
所以在计算机界就出现了几个版本的密码本:
ASCII: 最初版本的密码本:包含所有的英文字母,数字,特殊字符。
最初:
一个字符 000 0001 用7位二进制表示
后来优化-->预留一位以便以后的扩展,因此使用8位二进制,而英文用不了那么多位二进制,所以最开始的一位都是0(一位二进制可以
表示两种(0或者1),8位二进制可以表示2**8个字符)
A: 01000001 8位 == 1个字节
a: 01100001
c: 01100011
对于ASCII码来说:
'hello laddy' 一个字节代表一个字符,这里共11个字符,11个字节。
unicode:万国码,创建的目的是将所有国家的语言文字都写入这个密码本。
起初:1个字符用16位二进制即2个字节表示。但是发现并不够涵盖所有国家的语言。
A: 01000001 01000001
b: 01000001 01100001
中:01000001 01100101
改版:1个字符 32位 4个字节表示。但是浪费资源,占空间。
A: 01000001 01000001 01000001 01000001
b: 01000001 01100001 01000001 01000001
中:01000001 01100101 01000001 01000001
Unicode升级后--->utf-8: 最少用8位表示一个字符。
英文字母A: 01000001 用8位 一个字节表示
欧洲文字: 01000001 01100001 用16位 两个字节表示
中文: 01000001 01100101 01000001 用24位 三个字节表示
'abc小姐姐':12个字节
gbk:国标,只包含中文、英文(英文字母,数字,特殊字符)
英文A:01000001 用8位 一个字节表示
中文:01000001 01100101 用16位 两个字节表示
这几种编码中,英文字母对应的意思都是统一按照ASCII的对应关系,而其他字符没有任何关系
所有编码都与unicode有关
8 bit == 1Bytes 位(bit)音译为“比特”,表示二进制位
1024Bytes == 1KB 字节(Byte)音译为“拜特”,习惯上用大写的“B”表示。
1024KB == 1MB 1个字节等于8个比特(1Byte=8bit),也就是一个字节由八个二进制位构成
1024MB == 1GB
1024GB == 1TB
1024TB == 1PB
gbk utf-8 之间的转换?
且听很多回后的分解