day3笔记
一、内容回顾
1.break:停止当前循环,后面的程序不会运行,跳出循环。
跳出while循环:1,改变条件。2.break
continue:结束本次循环,继续下一次循环。
2.格式化输出:%%可以在格式化中打印%
二、作业讲解
#-*- encoding:utf-8 -*- __author__ = 'Administrator' #5,写代码计算1-2+3....+99除了88以外所有数的和。 # count = 1 # sum = 0 # while count < 100: # if count % 2 == 1: # sum = sum + count # elif count == 88: # count += 1 # continue # else: # sum = sum - count # count += 1 # print(sum) ''' 6,用户登录(三次机会)并且每次输错时显示剩余登录机会(用到字符串格式化。) 第六题完成的同学可做升级版: 当剩余机会为0时,可以询问用户是否在试试,如果用户同意在尝试,那就将在给他三次机会,可一直继续。 ''' username = "taibai" password = '123' i = 0 while i < 3: name = input('请输入你的用户名:') pwd = input('请输入你的密码:') if username == name and password == pwd: print('您登录成功') break else: print('登录失败,您还有%d次登录机会'%(2-i)) if (2-i) == 0 : result = input('是否还想在试试?Yes') if result == 'Yes': i = 0 continue i += 1 else:print('要不要脸你')
三、初始编码
ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256,所以,ASCII码最多只能表示 256 个符号。
为了容纳更多国家的语言文字,诞生了unicode ,它用两个字节表示,事实上Unicode对汉字支持不怎么好,这也是没办法的, 简体和繁体总共有六七万个汉字,而UCS-2最多能表示65536个,才六万 多个,所以Unicode只能排除一些几乎不用的汉字,好在常用的简体汉字 也不过七千多个,为了能表示所有汉字,Unicode也有UCS-4规范,就是用 4个字节来编码字符。
升级版 utf-8 一个中文 3个字节去表示。
gbk国内使用,一个中文用2个字节。gbk也在不同的发展扩展中
总结:
ASCII:一个Bytes代表一个字符(英文字符/键盘上的所有其他字符),1Bytes=8bit,8bit可以表示0-2**8-1种变化,即可以表示256个字符 ASCII最初只用了后七位,127个数字,已经完全能够代表键盘上所有的字符了(英文字符/键盘的所有其他字符),后来为了将拉丁文也编码进了ASCII表,将最高位也占用了 #阶段二:为了满足中文和英文,中国人定制了GBK GBK:2Bytes代表一个中文字符,1Bytes表示一个英文字符 为了满足其他国家,各个国家纷纷定制了自己的编码 日本把日文编到Shift_JIS里,韩国把韩文编到Euc-kr里 #阶段三:各国有各国的标准,就会不可避免地出现冲突,结果就是,在多语言混合的文本中,显示出来会有乱码。如何解决这个问题呢??? #!!!!!!!!!!!!非常重要!!!!!!!!!!!! 说白了乱码问题的本质就是不统一,如果我们能统一全世界,规定全世界只能使用一种文字符号,然后统一使用一种编码,那么乱码问题将不复存在, ps:就像当年秦始皇统一中国一样,书同文车同轨,所有的麻烦事全部解决 很明显,上述的假设是不可能成立的。很多地方或老的系统、应用软件仍会采用各种各样的编码,这是历史遗留问题。于是我们必须找出一种解决方案或者说编码方案,需要同时满足: #1、能够兼容万国字符 #2、与全世界所有的字符编码都有映射关系,这样就可以转换成任意国家的字符编码 这就是unicode(定长), 统一用2Bytes代表一个字符, 虽然2**16-1=65535,但unicode却可以存放100w+个字符,因为unicode存放了与其他编码的映射关系,准确地说unicode并不是一种严格意义上的字符编码表,下载pdf来查看unicode的详情: 链接:https://pan.baidu.com/s/1dEV3RYp 很明显对于通篇都是英文的文本来说,unicode的式无疑是多了一倍的存储空间(二进制最终都是以电或者磁的方式存储到存储介质中的) 于是产生了UTF-8(可变长,全称Unicode Transformation Format),对英文字符只用1Bytes表示,对中文字符用3Bytes,对其他生僻字用更多的Bytes去存 #总结:内存中统一采用unicode,浪费空间来换取可以转换成任意编码(不乱码),硬盘可以采用各种编码,如utf-8,保证存放于硬盘或者基于网络传输的数据量很小,提高传输效率与稳定性。
四 、运算符
and 且,前后为真才为真。or 或,有一为真,就为真。not 非。取反。
print(3 > 4 and 2 <3) F
print(3 > 4 or 2 < 3) T
print(3 > 2 and 2 <4) T
print(3 > 4 or 2 > 3) F
print(not True) F
print(not False) T
print(not 3 > 4) T
优先级:()>not>and>or
同等优先级条件下,从左至右依次计算。
print(4 > 3 or 4 < 3 and 1!=1)
print(2 > 1 and 3 < 4 or 4 > 5 and 2 < 1)
print(1 > 2 and 3 < 4 or 4 > 5 and 2 > 1 or 9 < 8)
ps:F or F or 9<8 F
print(1 > 1 and 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6)
PS :F or F or 7<6 F
print(not 2 > 1 and 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6)
PS:F or F or 7<6 F
ps :
int与bool值之间的转换。
1,bool ----> int
a = int(True)
b = int(False)
print(a,b)
int ---> bool
a = bool(413456)
b = bool(6.5)
c = bool(0)
d = bool(-1)
print(a,b,c,d)
x or y 如果 x 为真,则值为x,否则为y
'''
print(4 or 3)
print(2 or 3)
print(1 or 3)
print(0 or 3)
print(-1 or 3)
'''
x and y 如果 x 为真,则值为y,否则为x
'''
print(4 and 3)
print(2 and 3)
print(1 and 3)
print(0 and 3)
print(-1 and 3)
'''
print(0 and 3 or 4 or 1 or 2)
print(3 or 2>1) 3
print( 2>3 or 3)
print( 2>2 or 0)
print( 2>3 or 3)
in 某个字符串或者其他数据类型中是否含有某个字符串
in not in
s1 = 'abcd'
print('a' in s1)
print('ag' in s1)
print(1 and 'a' in s1)