day 2 - 逻辑运算
1. 初识编码
最早的'密码本' ascii 涵盖了英文字母大小写,特殊字符,数字。
ascii 只能表示256种可能,太少,
后来创办了万国码 unicode
16表示一个字符不行,32位表示一个字符。
A 01000001010000010100000101000001
B 01000010010000100100001001000010
我 01000010010000100100001001000010
Unicode 升级 utf-8 utf-16 utf-32
8位 = 1字节bytes
utf-8 一个字符最少用8位去表示,英文用8位 一个字节
欧洲文字用16位去表示 两个字节
中文用24 位去表示 三个字节
utf-16 一个字符最少用16位去表示
gbk 中国人自己发明的,一个中文用两个字节 16位去表示。
编码转换
#str --->byte encode 编码 s = '亦双弓' b = s.encode('utf-8') print(b) #byte --->str decode 解码 s1 = b.decode('utf-8') print(s1) #字母数字特殊字符的编码 utf-8 与 gbk 可以互转 s = 'abc##123' b = s.encode('utf-8') print(b) #byte --->str decode 解码 s1 = b.decode('gbk') print(s1)
2.单位转换
1bit 8bit = 1bytes
1byte 1024byte = 1KB
1KB 1024kb = 1MB
1MB 1024MB = 1GB
1GB 1024GB = 1TB
3.格式化输出
name = input('请输入姓名:') age = input('请输入年龄:') height = input('请输入身高:') msg = '我叫%s,今年%s,身高%s'%(name,age,height) print(msg)
name = input('请输入姓名:') age = input('请输入年龄:') job = input('请输入工作:') hobbie = input('你的爱好:') msg = ''' ------------ info of %s ------------ Name:%s Age:%d Job:%s hobbie:%s ----------------end----------------- '''%(name,name,int(age),job,hobbie) print(msg)
在输出语句中有时会使用到 % ,这时需要使用 %% 来转义,如下:
name = input('请输入姓名') age = input('请输入年龄') height = input('请输入身高') msg = "我叫%s,今年%s 身高 %s 学习进度为3%%s" %(name,age,height) print(msg)
4.逻辑运算
and or not
优先级,()> not > and > or
not –表示取反运算。
and –表示取与运算。
or –表示取或运算。
print(1<4 and 8>7) print(1<4 and 8>9) print(2 > 1 and 1 < 4 or 2 < 3 and 9 > 6 or 2 < 4 and 3 < 2) print(3>4 or 4<3 and 1==1) #F print(1 < 2 and 3 < 4 or 1>2) #T print(2 > 1 and 3 < 4 or 4 > 5 and 2 < 1) #T print(1 > 2 and 3 < 4 or 4 > 5 and 2 > 1 or 9 < 8) #F print(1 > 1 and 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6) #F print(not 2 > 1 and 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6) #F
x or y,x 为非零,则返回x,否则返回 y
print(1 or 2) #1 print(3 or 2) #3 print(0 or 2) #2 print(0 or 100) #100 print(2 or 100 or 3 or 4) # 2 print(0 or 4 and 3 or 2) #3
x and y,x True,则返回y
print(1 and 2) #2 print(0 and 2) #0 print(2 or 1 < 3) #2 print(2 < 3) #T print(3 > 1 or 2 and 2) #T print(2 or 1 < 3 and 2) #2 print (1 > 2 and 3 or 4 and 3 < 2) #F
int ----> bool 非零转换成bool True 0 转换成bool 是False
print(bool(2)) print(bool(-2)) print(bool(0)) #bool --->int print(int(True)) # 1 print(int(False)) # 0
5. while else循环
count = 0 while count <= 5 : count += 1 if count == 3:break print("Loop",count) else: print("循环正常执行完啦") print("-----out of while loop ------")
相关练习
1.判断一下输出
print(5<4 or 6) print(5>4 or 6) print(5<4 and 6) print(5>4 and 6)
2. 计算 1-2+3...+99 中除88以外的数总和
自己写的第一种好理解,第三种逻辑很新颖,值得学习
#方法一 count=1 sum=0 while count <=99: if count%2==1: sum = sum + count elif count == 88: pass else: sum = sum - count count += 1 print (sum) #方法二 count=1 sum=0 while count <=99: if count == 88: count += 1 continue if count%2==1: sum = sum + count else: sum = sum - count count +=1 print (sum) i = input('数字') if i=='2': print(1212) if i =='2': print(11111) else: print(666) #方法三 i=0 j=-1 sum = 0 while i<99: i += 1 j = -j if i== 88: continue else: sum +=i*j print(sum)
3. ⽤户登陆(三次输错机会)且每次输错误时显示剩余错误次数(提示:使⽤字符串格式化)
#方法一: i=0 j=2 while i<3: user=input("请输入账号:") password=input("请输入密码:" ) if user=='ysg' and password=='123': print('欢迎回来'+user) break elif i==2: print("超出登录次数,账号已冻结") else: print('---输入错误,还剩余' + str(j) + '次机会,请重新输入---') i += 1 j =j-1 #方法二: i=2 while i>=0: user=input("请输入账号:") password=input("请输入密码:" ) if user=='ysg' and password=='123': print('欢迎回来%s'%(user)) break elif i==0: print("超出登录次数,账号已冻结") else: print('---输入错误,还剩余' + str(i) + '次机会,请重新输入---') i -= 1 #方法三 i=2 while i>=0: user=input("请输入账号:") password=input("请输入密码:" ) if user=='ysg' and password=='123': print('欢迎回来%s'%(user)) break elif i==0: print("超出登录次数,账号已冻结") again=input("再试一次?Y or N:") if(again=='Y'): i=3 else: print('---输入错误,还剩余' + str(i) + '次机会,请重新输入---') i -= 1 #else: # print("还在试???")