Python学习5--编码问题、格式化和流程控制(选择和循环)

一、编码问题

1、字符集
定义:对字符的集合,字符的集合是用来映射存储字符的,将字符映射在二进制中存储。
2、常见的几种字符集
1)ASCII编码
8个数据位:对应127个字母、数字、符号
可用如下方式查询对应的ASCII编码:

print(ord("a"))
print(bin(ord("a")))

输出:
97
0b1100001

其中0b1100001是存储在计算机中对应字母a的ASCII编码。

2)GB2312编码
由中国开发的针对汉字等文字的编码集 两个字节16个数据

3)unicode编码
unicode将所有语言都统一到一套编码集,通常使用两个字节16位,有的是4个字节。
unicode编码是定长存储,会比较浪费空间

4)utf-8编码
英文字符使用1个字节,沿用原来的ASCII编码
中文存储使用3个字节
uft-8是变长存储

在python中,字节采用的是ASCII编码集,字符采用的是unicode编码集

a = "中"
#b = b"中"  无法执行,会报错

3、unicode和utf-8编码之间的关系
1)获得汉字的unicode编码

print(hex(ord("华")))

输出:
0x534e

如何进行验证0x534e就是“华”的unicode的编码?
需要注意的一点是unicode编码是十六进制,且格式为\u…
具体如下:

print("\u534e")

输出结果为:

将unicode编码转化成二进制可得:

print(bin(0x534e))

输出:
0b101001101001110

2)获得汉字的utf-8编码

a = "华"
print(a.encode("utf-8"))

输出为:
b’\xe5\x8d\x8e’
同时也验证utf-8中的汉字是3个字节(如:’\xe5\x8d\x8e’),而unicode中汉字存储是2个字节(如:0x534e)
将输出转换为二进制可得到:

print(bin(0xe5),bin(0x8d),bin(0x8d))

输出:
0b11100101 0b10001101 0b10001101

3)unicode码实际上可以看成utf-8编码的一部分,大量支持unicode码的历史软件仍然可以在utf-8下使用。

4、unicode和utf-8在计算机中的工作方式
(1)计算机内存中统一使用unicode编码,当需要保存到硬盘或者传输时会转化成utf-8编码;
(2)浏览网页时服务器也是把动态生成的unicode编码转化成utf-8编码模式传输到浏览器。

5、字节和字符之间的转换
字节转换成字符:解码 decode
字符转化成字节:编码 encode
例如:

s = "溪云阁"
print(s.encode("utf-8"))
print(s.encode("gbk"))

输出:
b’\xe6\xba\xaa\xe4\xba\x91\xe9\x98\x81’
b’\xcf\xaa\xd4\xc6\xb8\xf3’

解码:

s = "溪云阁"
a = s.encode()
print(a.decode())

输出:
溪云阁

二、格式化详解

python中有两种格式化的方法:一种是采用%进行格式化,另外一种是采用format方法

1、%方法介绍
%s---------------相当于str(o)
%d---------------带符号的十进制整数
%f----------------浮点数,可以指定保留设置的小数位
%r----------------相当于repr(o)

print("abs%s"%1)
print("abs"+str(1))

这两种方式输出均为abs1,%s相当于是调用str方法

2、%方法使用
1)简单使用

print("%s+%s=%s"%(1,2,3))

输出:
1+2=3

2)方法扩展
a) %ns:表示总共n个占位符,且右对齐,如果n小于需求长度,正常输出,如果n大于需求长度,剩下的用空格填充,如下所示:

print("%20s"%12345)
print("%3s"%12345)

输出如下:
12345
12345

b)%-ns:表示左对齐,其他使用规则如上一致,如:

print("%-20s"%12345)
print("%-3s"%12345)

print("%-20s"%12345,end="end")
print("%-3s"%12345,end="end")

输出:

12345               
12345
12345               end12345end

可以看出采用%-20s"%12345输出时12345后面是有空格的

c)%.ns表示截取几位,当n大于字符长度时,不会留空格,如下:

print("%.5s" % "hello world")
print("%.20s" % "hello world",end="|||")

输出:
hello
hello world|||

d)%m.ns:m表示总的占位符,n表示截取的数量,m正数时表示右对齐,反之左对齐

print("%20.5s" % "hello world")
print("%-20.5s" % "hello world",end="|||")

输出为:
hello
hello |||

当m小于n时,以n的数据为准,且都是左对齐

print("%3.5s" % "hello world")
print("%3.15s" % "hello world")

print("%-3.15s" % "hello world",end="|||")

输出:
hello
hello world
hello world|||

3)%f格式化浮点数
a)%m.nf,m是总的占位符,n是保留的小数,当m小于n时,以n为准,且保留小数是四舍五入的。

print("%0.0f"%3.1415926)
print("%0.f"%3.1415926)
print("%.0f"%3.1415926)

输出:
均为3
以上三种写法结果一样,n为0时只取整数部分

print("%20.2f"%13.1415926)
print("%1.20f"%13.1415926)

输出:

               13.14
13.14159259999999918023

整数部分的占位符,会默认用空格表示
b)可以指定是否用0进行填充,如下:

print("%020.2f"%13.1415926)

输出:
00000000000000013.14

3、format方法
格式为:{[参数/索引]:[对齐方式][占位数].[保留位数][s/f等格式(可省略)]}.format(要替换的值)
基础使用如下:

print("{}+{}={}".format(1,2,3))
print("{}+{}={}".format(2,1,3))
print("{x}+{y}={z}".format(x=1,y=2,z=3))

输出:
1+2=3
2+1=3
1+2=3

b)对于字符串而言,s可以省略,且默认对齐方式为<左对齐
左对齐<,居中^,右对齐>

print("{:<10} {:>10}".format("happy","everyday"))

输出如下:

happy        everyday

数字表示占位符

c)浮点数f的使用

print("{} {:0.2f}".format(3.1415,3.1415))

输出:

3.1415 3.14

小数点后的参数表示保留的有效位数

d)混合使用
索引:对齐方式m.nf >>>m表示占位符,m<n时无效,n表示保留的有效位数,采用四舍五入的方法

print("{1} {0:>10.2f}".format(1.1415,2.1415))

输出:

2.1415       1.14

三、 程序执行的过程:

1、程序执行的过程
顺序:按部就班
选择:二选一、多选一
循环:重复
需注意python的格式为:
缩进:决定当前代码的层次,同一层次的语句必须有相同的缩进,通常使用tab键代表一个层次

2、选择(if)
a)格式如下:

if  布尔条件: 
	布尔条件返回True会执行的代码
elif 布尔条件:
	布尔条件返回True会执行的代码
else:
	以上布尔条件返回False会执行的代码

elif可根据实际情况来选择是否存在
elif 当满足一次条件,下面的判断不再执行

a = 101
if a>100:
    print("大于100的数")
else:
    print("小于等于100的数")

输出:
大于100的数

a = 90
if a>=90:
    print("优")
elif a>=70:
    print("良")
elif a>=60:
    print("及格")
else:
    print("不及格")

输出:

需要注意的点是:
1) if后面是条件,可以单独存在
2)else后面没有条件,不能单独存在
3)elif后面有条件,也不能单独存在
4)当有多个elif的时候只执行一次,尽量将判断按照从大到小,或者从小打到顺序判断
如果没有顺序,需要使用链式比较
5)如果有多个if,要把发生概率大的放在前面

例子:根据今天是星期几(1-7),输入星期几,输出要做的事情,周一----周五:上课 周六:自习 周天:休息

day = int(input("请输入今天星期几:"))
if day<=0 or day>7:
    print("输入错误,范围不在1~7!")
else:
    if day<=5:
        print("上课")
    else:
        if day == 6:
            print("自习")
        else:
            print("休息")

b)相关类型的bool值说明
在这里插入图片描述
c)三元表达式
格式如下:
True执行 if 条件 else False执行
具体如下:

a = 90
print("优") if a>=90 else print("需继续努力")

输出:

d)断言
判断某些语句是否正确
格式为:assert 表达式 ,[错误信息]
运用如下:

assert 1<0  ,"1<0错误"
print("继续")

报错:
assert 1<0 ,“1<0错误”
AssertionError: 1<0错误

assert 1>0  ,"1<0错误"
print("继续")

输出:
继续

主要用来调试程序时用

3、循环
a)while循环体
格式为:

while 布尔条件:
    循环体

一般运用于:1.有明确的循环条件,特别以次数为条件 2. 永远为真
如:求1到100内所有数字之和

s = 0
n = 1
while n<=100:
    s+=n
    n+=1
print(s)

输出:
5050

b)for循环
格式为:

for 每一个变量名字  in 迭代体:
    循环的程序

如:

s = 0
for i in range(1,101):
    s+=i
print(s)

c)for循环的嵌套
如:打印九九乘法表

for i in range(1,10):
    for j in range(1,i+1):
        print("{}*{}={}".format(j,i,j*i),end="  ")
    print()

输出:

1*1=1  
1*2=2  2*2=4  
1*3=3  2*3=6  3*3=9  
1*4=4  2*4=8  3*4=12  4*4=16  
1*5=5  2*5=10  3*5=15  4*5=20  5*5=25  
1*6=6  2*6=12  3*6=18  4*6=24  5*6=30  6*6=36  
1*7=7  2*7=14  3*7=21  4*7=28  5*7=35  6*7=42  7*7=49  
1*8=8  2*8=16  3*8=24  4*8=32  5*8=40  6*8=48  7*8=56  8*8=64  
1*9=9  2*9=18  3*9=27  4*9=36  5*9=45  6*9=54  7*9=63  8*9=72  9*9=81 

d)跳出循环

  1. break 跳出当前循环
    2)continue 跳出循环后继续执行下一次循环
    用法如下:
for i in range(100):
    if i ==10:
        print("找到了10")
        break
print("程序结束")

输出:
找到了10
程序结束

for i in range(5):
    if i ==2:
        print("找到了2")
        continue
    print("继续执行")
print("程序结束")

输出:

继续执行
继续执行
找到了2
继续执行
继续执行
程序结束

e)在循环后使用else
else:在循环迭代正常完成之后执行的代码段
当for循环、while循环异常结束(break),就不执行else
如:
以下循环始终没有执行break语句

for i in range(5):
    if i ==8:
        print("找到了8")
        break
else:
    print("没找到2")

输出:

没找到2

如果执行了break语句,就不会执行else的执行体
如:

for i in range(5):
    if i ==2:
        print("找到了2")
        break
else:
    print("没找到2")

输出:
找到了2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值