一.while循环
什么是循环?说白了就是重复某个事物,你可以让它一直重复,也可以通过添加一些条件,让这个循环在我们的掌握中!下面让我们进入今天额内容.
1.while循环的语法
while 条件:
循环体
while True: #True 表示这个条件一直成立 print('你好') #死循环 会一直打印 你好
死循环在我们生活中也有应用到,比如:输入用户名和密码这种情况,输入错误可以一直输,当然也有次数限制的情况,这个会在下面的内容中提到
while 条件:
循环体
else:
循环体
s = input('输入数字:') while s > 60: #你输入的数字如果大于60,就会打印下面的结果 print('及格') else: #else 是否则的意思,如果小于60,就执行下面的代码 print('不及格')
上面的只是最简单的情况,通常while会和if语句组合使用,这样可以实现更多的功能
例如:
s = input('输入数字:') while True: if s > 60: print('及格') else: print('不及格')
上面的这种情况还是不够完美,还是死循环,又想实现功能,又想让它在实现完功能后自动停止,怎么办呢?
这里就要我们认识两个单词:break,continue
break 结束循环
continue 结束本次循环继续下次循环
s = input('输入数字:') while True: if s > '60': print('及格') break else: print('不及格') break 结果:如果你输入的数字大于60,打印完及格就会结束循环 输入的数字小于60,会打印不及格,同样也会结束循环
这是break一个简单的小应用,下面我们来说说continue的应用
注意: 如果循环是通过break退出的. 那么while后面的else将不会被执行, 只有在while条件判断是假的时候才会执行这个 else
while True: user = input('请输入用户名:') pwd = input('请输入密码:') if user == '喜羊羊' and pwd == '123' print('登录成功') break else: print('用户名或者密码错误,请重新输入') continue 结果:用户名输入'喜羊羊'和密码输入'123',则显示登陆成功,然后就会结束循环
有一个或者两个都没输对,就会显示用户名或密码错误,重新输入,continue就是起到输入不正确,让你能重新输入
否则就会一直打印'用户名或密码错误,请重新输入'
这种情况就是就是我们生活中经常遇到的登录情况,是不是很有画面感,当然我们还能限制输入次数,防止被盗.
count = 1 #定义一个计数器
while count <= 3: #把条件设置在一个范围,只能输入三次,三次都不对就会退出程序 user = input('请输入用户名:') pwd = input('请输入密码:') if user == '喜羊羊' and pwd == '123' #用户名和密码都正确才能登陆成功 print('登录成功') break else: print('用户名或者密码错误,请重新输入')
count += 1 #每次让它加1,既可以循环,又能限制次数,当上边count不满足条件就会自动停止
同样,我们也可以用while循环让程序数数,从1数到100
count = 1 while count <= 100: print(count) count = count + 1
结果:1
2
3
...
100
数数. 1-100奇数
count = 1
while count <= 100:
print(count)
count = count + 2
while循环求和
计算 1-100之间所有的数的和 sum = 0 # sum: 0 + 1 + 2 + 3 + 4....99 + 100 count = 1 # count: 1, 2, 3, 4, 99,100, 101 while count <= 100: sum = sum + count # 累加运算 count = count + 1 print(sum)
二.格式化输出
现在如果我们有这种需求,让用户输入name, age, job,hobby 然后输出如下所示:
------------ info of Alex Li ----------- Name : Alex Li Age : 22 job : Teacher Hobbie: girl ------------- end -----------------
你怎么实现呢?你会发现,用字符拼接的方式很难实现这种格式的输出,所以一起来学习下新姿势 只需要把要打印的格式先准备好, 由于里面的 一些信息是需要用户输入的,你没办法预先知道,因此可以先放置个占位 符,再把字符串里的占位符与外部的变量做个映射关系就好啦!
name = input("Name:") age = input("Age:") job = input("Job:") hobby = input("Hobbie:") info = ''' ------------ info of %s ----------- #这里的每个 %s 就是⼀个占位符,本行的代表后面拓号里的name Name : %s #代表 name Age : %s #代表 age job : %s #代表 job Hobbie: %s #代表 hobbie ------------- end ----------------- ''' % (name,name,age,job,hobbie) # 这里的 % 号就是把前面的字符串与括号后面的变量关联起来 print(info)
%s就是代表字符串占位符,除此之外,还有%d, 是数字占位符,如果把上面的age后面的换成%d,就代表你必须只能输入数字 , 这时对应的数据必须是int类型 . 否则程序会报错 , 使用时 , 需要进行类型转换.
int(str) # 字符串转换成int str(int) # int转换成字符串
类似这样的操作在后面还有很多, 如果 你头铁, 就不想转换, 觉着转换很麻烦, 也可以全部都用%s. 因为任何东西都可以直接转换成字符串--> 仅限%s .现在又来新问题了. 如果想输出:
我叫xxx, 今年xx岁了,我们已经学习了2%的python基础了
这里的问题出在哪里呢? 没错2%, 在字符串中如果使用了%s这样的占位符. 那么所有的%都将变成占位符. 我们的2%也变成了 占位符. 而"%的"是不存在的, 这里我们需要使用%%来表示字符串中的%.
注意: 如果你的字符串中没有使用过%s,%d站位. 那么不需要考虑这么多. 该%就%.没毛病老铁.
print("我叫%s, 今年22岁了, 学习python2%%了" % '王尼玛') # 有%占位符 print("我叫王尼玛, 今年22岁, 已经凉凉了100%了") # 没有占位符
三.运算符
计算机可以进行的运算有很多种,可不只加减乘除这么简单,运算按种类可分为:
算数运算、 比较运算、 逻辑运算、 赋值运算、 成员运算、 身份运算、 位运算.
今天我们暂只学习算数运算、比较运算、逻辑运算、赋值运算
2.1算数运算
假设我们现在设置两个变量 : a = 10 b = 20
运算符 描述 实例 + 加 + 两个对象相加 a + b 输出结果 30 - 减 - 得到负数或是一个数减去另一个数 a - b 输出结果 -10 * 乘 * 两个数相乘或返回一个被重复若干次的字符串 a * b 输出结果 200 / 除 / x除以y b / a 输出结果 2 % 取模 % 返回除法的余数 b % a 输出结果 0 ** 幂 ** 返回x的y次幂 a ** b 10的20次方 100000000000000000000 // 取整除 // 返回商的整数部分 9 // 2 输出结果 4 9.0 // 2.0 输出结果 4.0
2.2 比较运算
以下假设变量:a=10,b=20
运算符 描述 实例 == 等于 - 比较对象是否相等 (a == b)返回False != 不等于 - 比较两个对象是否不相等 (a == b)返回True <> 不等于 - 比较两个对象是否不相等 (a <> b)返回True > 大于 - 返回x是否大于y (a > b)返回False < 小于 - 返回x是否小于y (a < b)返回True >= 大于等于 - 返回x是否大于等于y (a >= b)返回False <= 小于等于 - 返回x是否小于等于y (a <= b)返回True
注意: <> 不等于,类似于 !=,不过python3.x版本以后都用 !=
所有比较运算符返回1表示真,返回0表示假,这分别与特殊的变量True和False等价.变量名记得要大写
2.3 赋值运算
运算符 描述 实例 = 简单的赋值运算符 c = a + b 将 a + b的运算结果赋值为c += 加法赋值运算符 c += a等效于 c = c + a -= 减法赋值运算符 c -= a等效于 c = c - a *= 乘法赋值运算符 c *= a等效于 c = c * a /= 除法赋值运算符 c /= a等效于 c = c / a %= 取模赋值运算符 c %= a等效于 c = c % a **= 幂赋值运算符 c **= a等效于 c = c ** a //= 取整除赋值运算符 c //= a等效于 c = c // a
2.4 逻辑运算
运算符 描述 实例 and 布尔'与',如果x为False,x and y返回False,否则它返回y的计算值 (a and b) 返回True or 布尔'或',如果x是True,它返回True,否则它返回y的计算值 (a and b) 返回True not 布尔'非',如果x为True,返回False.如果x为False,它返回True not(a and b)返回False
针对逻辑运算的进一步研究:
1, 在没有()的情况下not 优先级高于 and,and优先级高于or,即优先级关系为( )>not>and>or,同级优先级从左往右计算。
() > not > and > or
例题: 判断下列逻辑语句的True,False。
3>4 or 4<3 and 1==1 1 < 2 and 3 < 4 or 1>2 2 > 1 and 3 < 4 or 4 > 5 and 2 < 1 1 > 2 and 3 < 4 or 4 > 5 and 2 > 1 or 9 < 8 1 > 1 and 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6 not 2 > 1 and 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6
2. x or y , x为真,值就是x,x为假,值是y;
x and y, x为真,值是y,x为假,值是x
in和not in
可以判断xxx字符串是否出现在xxxxx字符串中
content = input("请输入你的评论:") if "苍老师" in content or '邱老师' in content: print('你输入的内容不合法') else: print("评论成功")
四.初始编码
python2解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill),在python3对内容进行编码的默认为utf-8。
早期, 计算机是美国发明的, 普及率不高, 一般只是在美国使用. 所以, 最早的编码结构就是按照美国人的习惯来编码的,对应数字+字母+特殊字符总共也没多少. 所以就形成了最早的编码ASCII码, 直到今天ASCII依然深深的影响着我们. ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电 脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(1个字节),即:2**8 = 256,所 以,ASCII码最多只能表示 256 个符号.
随着计算机的发展, 以及普及率的提高, 流行到欧洲和亚洲, 这时ASCII码就不合适了. 比如: 中国汉字有几万个,而ASCII 最多也就256个位置, 所以ASCII不行了, 怎么办呢? 这时, 不同的国家就提出了不同的编码来适用于各国的语言环境. 比如, 中国的GBK, GB2312, BIG5, ISO-8859-1等等. 这时各个国家都可以使用计算机了. GBK, 国标码占用2个字节, 对应ASCII码 GBK直接兼容, 因为计算机底层是用英文写的, 你不支持英文肯定不行, 而英文已经使用了ASCII码, 所以GBK要兼容ASCII, 这里GBK国标码前面的ASCII码部分, 由于使用两个字节, 所以对于ASCII码而言, 前9位都是0.
字母A:0100 0001 # ASCII 字母A:0000 0000 0100 0001 # 国标码
国标码的弊端: 只能中国用,日本就垮了, 所以国标码不满足我们的使用, 这时提出了一个万国码Unicode. unicode刚开始设计是每个字符两个字节, 设计完了, 发现我们中国汉字依然无法进行编码, 只能进行扩充, 扩充成32位也就是4个字节, 这回够了, 但是问题来了, 中国字9万多, 而unicode可以表示40多亿, 根本用不了, 太浪费了, 于是乎, 就提出了新的 UTF编码.可变长度编码.
UTF-8: 每个字符最少占8位, 每个字符占用的字节数不定, 根据文字内容进行具体编码. 比如: 英文, 就1个字节就够了, 汉 字占3个字节, 这时既满足了中文, 也满足了节约, 也是目前使用频率最高的一种编码.
UTF-16: 每个字符最少占16位. GBK: 每个字符占2个字节, 16位.
GBK: 每个字符占2个字节, 16位.
单位转换:
8bit = 1byte
1024byte = 1KB
1024KB = 1MB
1024MB = 1GB
1024GB = 1TB
1024TB = 1PB
1024PB = 1EB
1024EB = 1ZB
1024ZB = 1YB
1024YB = 1NB
1024NB = 1DB
常用到TB就够了