今日大纲:
1. while循环
2. 格式化输出
3. 运算符
4. 编码初识
1. while循环
- while 无限循环:
while True: # 死循环
print('大悲咒')
print('可不可以')
print('青春')
print('两只老虎')
print('盗将行')
- while 循环的结构:
while 条件:
循环体
- 如何让循环终止
1. 改变条件(标志位[flag]的概念)
flag = True
while flag:
print('大悲咒')
print('可不可以')
print('青春')
flag = False
print('两只老虎')
print('盗将行')
2. 加入关键字break,终止循环
break:循环中,只要遇到break,立马结束循环
while True:
print(111)
print(222)
break
print(333)
print(444)
print(123)
结果:
111
222
123
- 用while循环输出1-100
方法一:
flag = True
count = 1
while flag:
print(count)
count += 1
if count == 101:
flag = False
方法二:
count = 1
while count < 101:
print(count)
count += 1
- 用while,break打印1+2+3+...+100的结果
count = 1
sum = 0
while True:
sum += count
count += 1
if count == 101:
break
print(sum)
- continue:结束本次循环,继续下次循环
while True:
print(111)
print(222)
continue
print(333)
- while else 结构
如果while循环被break打断,则不执行else代码
count = 1
while count < 4:
print(count)
count += 1
else:
print(666)
print(222)
结果:
1
2
3
666
222
count = 1
while count < 4:
print(count)
count += 1
if count == 3:break
else:
print(666)
print(222)
结果:
1
2
222
应用场景:
1. 验证用户名密码,重新输入这个功能需要while循环
2. 无限次的显示页面,无限次的输入...
2. 格式化输出
制作一个模板,某些位置的参数的动态的,像这样就需要用格式化输出
字符串的动态替换
第一种方式:
name = input('请输入姓名:')
age = input('请输入年龄:')
sex = input('请输入性别:')
# % 为占位符;s:str,数据类型为字符串;d: digit,数据类型为数字
msg = '你的名字是%s,你的年龄是%s,你的性别是%s' % (name, age, sex)
print(msg)
第二种方式:
name = input('请输入姓名:')
age = input('请输入年龄:')
sex = input('请输入性别:')
msg = '你的名字是%(name1)s,你的年龄是%(age1)s,你的性别是%(sex1)s' % {'name1':name, 'age1':age, 'sex1':sex}
print(msg)
小知识点:在格式化输出中,只想单纯的表示一个%时,应该用两个%表示
name = 'BlameK'
age = 23
msg = '我叫%s,今年%s,我的学习进度1%%' % (name, age)
print(msg)
结果:
我叫BlameK,今年23,我的学习进度1%
3. 运算符
算术运算:
+:加
-:减
*:乘
/:除
%:取余,返回除法的余数
**:幂
//:取整除 - 返回商的整数部分
比较运算:
==:等于 - 比较对象是否相等
!=:不等于 - 比较两个对象是否不相等
<>:不等于
>:大于
<:小于
>=:大于等于
<=:小于等于
赋值运算:
=:简单的赋值运算符
+=:加法赋值运算符
count = count + 1 简写 count += 1
-=:减法赋值运算符
*=:乘法赋值运算符
count = count * 5 简写 count *= 5
/=:除法赋值运算符
%=:取模赋值运算符
**=:幂赋值运算符
//=:取整除赋值运算符
逻辑运算:
and:布尔‘与’
or:布尔‘或’
not:布尔‘非’
优先级(从高到低):
()、not、and、or
第一种情况:前后条件为比较运算
print(1 < 2 or 3 > 1) True
print(1 < 2 and 3> 4) False
print(1 < 2 and 3 > 4 or 8 < 6 and 9 > 5 or 7 > 2) True
print(1 > 2 and 3 < 4 or 4 > 5 and 2 > 1 or 9 < 8) False
print(1 > 1 and 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6) False
第二种情况:前后两边的条件为数值
x or y if x is True,return x
print(1 or 2) 1
print(0 or 2) 2
print(0 or 0) 0
print(-1 or 3) -1
and 和 or相反
print(1 and 2) 2
print(0 and 2) 0
print(2 and -1) -1
print(1 or 3 and 5 or 4) 1
print(0 or 3 and 5 or 4) 5
变态面试题(总结规律):
print(1 > 2 or 3 and 4 < 6) True
print(2 or 3 and 4 < 6) 2
补充:
int --> bool
0对应的bool值为False,非0都是True
print(bool(100)) True
print(bool(-1)) True
print(bool(0)) False
print(int(True)) 1
print(int(False)) 0
应用场景:
1. if while 等条件判断(数据库,Django ORM复杂查询)
2. 面试时
4. 编码初识
尹宁
太白:今晚吃鸡!
今:0101
晚:010111
吃:0101 00000 01
鸡:011
010101011101010000001011
上面的不合理,应该有断位
固定8位:
今:0101 0001
晚:0101 1101
吃:0101 0001
鸡:0111 1100
01010001 01011101 01010001 01111100
断位,要有一个密码本:记录的铭文与二进制的对应关系
ASCII:最初版本的密码本:所有的英文字母,数字,特殊字符。
最初:一个字符(7位) 000 0001
后来优化:一个字符(8位) 0000 0001
(最左一位全是0)
A:0100 0001 65
a:0110 0001 97
c:0110 0011 99
8位 == 一个字节
对于ASCII码(1个字符 == 1个字节)来说:
'Hello Laddy' 11个字符,11个字节,88位
字符:你能看到的这个内容的最小单元。
unicode: 万国码,将所有国家的语言文字都写入这个密码本
起初:1个字符 == 16位 == 2个字节
A:01000001 01100001
中:01100011 01100001
但这样仍然表示不完所有中文
改版:1个字符 == 32位 == 4个字节
中:01100011 01100001 01000001 01100001
浪费资源,占空间
8位永远等于一个字节
utf-8:最少用8位去表示一个字符。
A:01000001 一个字节
欧洲:01100011 01100001 两个字节
中文:01100011 01100001 01000001 三个字节
'old男孩' 9个字节
gbk:国标,只包含中文、英文(英文字母、数字、特殊字符)
A:01000001 一个字节
中文:01100011 01100001 两个字节
gbk、utf-8之间的转换?(下次讲解)
必须通过unicode进行转换
8 bit(位) == 1 bytes(字节)[1 B]
1024 bytes(1024 B) == 1 KB
1024 KB == 1 MB
1024 MB == 1 GB
1024 GB == 1 TB