第四天

一 概述

  • 整数类型
  • 浮点数类型
  • 复数类型
  • 数值运算操作符
  • 数值运算函数

二 整数类型

  • 可正可负,没有取值范围限制

  • pow(x,y)函数:x**y

    4种进制表示形式

    • 十进制 100

    • 二进制 以0b或0B开头: 0b0101

    • 八进制 以0o或0O 开头: 0o123 421

    • 十六进制 以0x或0X开头: 0x8b 8421

三 浮点数类型

与数学中实数的概率一致

  • 带小数点及小数的数字
  • 浮点数取值范围和精度存在限制
  • 取值范围数量级约-10308至10308,精度数量级10-16

浮点数间运算存在不确定尾数,不是bug

3.1 round()函数

  • round(x,y):对x四舍五入,d是保留的小数位数

  • 浮点数间运算及比较用round函数辅助

  • 不确定尾数一般发生在1016左右,round()

3.2 科学计数法表示浮点数

  • 使用字母e或E作为幂的符号,以10为基数,格式如下:<a>e<b>,表示 a*10b
  • 例如:4.3e-3 值为0.00439.6E5 值为 960000.0

关于Python浮点数,需要知道多些。

  • 取值范围和精度基本无限制
  • 运算存在不确定尾数 round()
  • 科学计数法表示

四 复数类型

与数学中复数的概念一致

如果x2 = -1,那么x的值什么?

  • 定义 j = −1 ,以此为基础,构建数学体系

  • a+bj 被称为复数,其中,a是实部,b是虚部

4.1 复数实例

z = 1.23e-4+5.6e+89j
  • 实部是什么?z.real 获得实部
  • 虚部是什么?z.imag 获得虚部

五 数值运算操作符

操作符是完成运算大的一种符号体系

操作符及使用 描述
x+y 加,x和y之和
x-y 减,x与y之差
x*y 乘,x与y之积
x / y 除,x与y之商 10/3 结果是3.3333333333333335
x//y 整数除,x与y之整数商10/3结果是3
+x x本身
-y y的负值
x%y 余数,模运算10%3结果是1
x**y 幂运算,x的y次幂,xy,当y是小数时,开放运算,10\*\*0.5结果是10−−√

5.2 二元操作符

二元操作符有对应的增强赋值操作符

增强操作符及使用 描述
x op= y x = x op y,其中,op为二元操作符

二元操作符有以下这些:x += yx -= yx *= yx /= yx // yx %= yx **= y

x = 3.1415
x **= 3 # 与 x = x **3 等价 # 31.003533398375005

5.3 数字类型的关系

类型间可进行混合运算,生成结果为"最宽"类型

  • 三种类型存在一种逐渐"扩展"或"变宽"的关系:整数 -> 浮点数 -> 复数

  • 例如:123 + 4.0 = 127.0 (整数+浮点数 = 浮点数)

六 数值运算函数

一些以函数形式提供的数值运算功能

函数及使用 描述
abs(x) 绝对值,x的绝对值,abs(-10.01) 结果为 10.01
divmod(x,y) 商余,(x//y, x%y),同时输出商和余数,divmod(10, 3) 结果为 (3, 1)
pow(x, y[, z]) 幂余,(x**y)%z,[..]表示参数z可省略,pow(3, pow(3, 99), 10000) 结果为 4587
round(x[, d]) 四舍五入,d是保留小数位数,默认值为0,round(-10.123, 2) 结果为 -10.12
max(x1,x2,⋯,xnx1,x2,⋯,xn) 最大值,返回x1,x2,⋯,xnx1,x2,⋯,xn中的最大值,n不限,max(1, 9, 5, 4 3) 结果为 9
min(x1,x2,⋯,xnx1,x2,⋯,xn) 最小值,返回x1,x2,⋯,xnx1,x2,⋯,xn中的最小值,n不限,min(1, 9, 5, 4 3) 结果为 1
int(x) 将x变成整数,舍弃小数部分,int(123.45) 结果为123; int("123") 结果为123
float(x) 将x变成浮点数,增加小数部分,float(12) 结果为12.0; float("1.23") 结果为1.23
complex(x) 将x变成复数,增加虚数部分,complex(4) 结果为 4 + 0j

七、小结

  • 整数类型的无限范围及4种进制表示
  • 浮点数类型的近似无限范围、小尾数及科学计数法
  • +、-、*、/、//、%、**、二元增强赋值操作符
  • abs()、divmod()、pow()、round()、max()、min()
  • int()、float()、complex()

天天向上实例

一年时间每周工作5天上升1%,休息日下降1%,要多努力呢?

xx=1
for i in range(360) :
    if i % 7==6 and i % 7==0 :
        xx*=0.99
    else : xx*=1.01

print(xx)

字符串类型及操作

一 概述

  • 字符串类型的表示

  • 字符串操作符

  • 字符串处理函数

  • 字符串处理方法

  • 字符串类型的格式化

二 字符串类型的表示

由0个或多个字符组成的有序字符序列

  • 字符串由一对单引号或一对双引号表示:"请输入带有符号的温度值: "或者 'C'
  • 字符串是字符的有序序列,可以对其中的字符进行索引:"请""请输入带有符号的温度值: " 的第0个字符

字符串有 2类共4种 表示方法

  • 由一对单引号或双引号表示,仅表示单行字符串:"请输入带有符号的温度值: "或者 'C'

  • 由一对三单引号或三双引号表示,可表示多行字符串

    python
      语言
    
    • 如果希望在字符串中包含双引号或单引号呢?:'这里有个双引号(")' 或者 "这里有个单引号(')"
    • 如果希望在字符串中既包括单引号又包括双引号呢?:''' 这里既有单引号(')又有双引号 (") '''

2.1字符串的序号

正向递增序号 和 反向递减序号

2.2 字符串的使用

使用[ ]获取字符串中一个或多个字符

  • 索引:返回字符串中单个字符 <字符串>[M]"请输入带有符号的温度值: "[0] 或者 TempStr[-1]
  • 切片:返回字符串中一段字符子串 <字符串>[M: N]"请输入带有符号的温度值: "[1:3] 或者 TempStr[0:-1]

2.3 字符串切片高级用法

使用[M: N: K]根据步长对字符串切片

  • <字符串>[M: N],M缺失表示至开头,N缺失表示至结尾:"〇一二三四五六七八九十"[:3] 结果是 "〇一二"
  • <字符串>[M: N: K],根据步长K对字符串切片:
    • "〇一二三四五六七八九十"[1:8:2] 结果是 "一三五七"
    • "〇一二三四五六七八九十"[::-1] 结果是 "十九八七六五四三二一〇

2.4 字符串的特殊字符——转义符

  • 转义符表达特定字符的本意:"这里有个双引号(\")" 结果为 这里有个双引号(")
  • 转义符形成一些组合,表达一些不可打印的含义:"\b"回退 "\n"换行(光标移动到下行首) "\r" 回车(光标移动到本行首)

三 字符串操作符

3.1 由0个或多个字符组成的有序字符序列

操作符及使用 描述
x+y 链接两个字符串x和y
nx 或 xn 复制n次字符串x
x in s 如果x是s的子串,返回true,否则返回false

3. 2 获取星期字符串

  • 输入:1-7的整数,表示星期几
  • 输出:输入整数对应的星期字符串
  • 例如:输入3,输出 星期三
# WeekNamePrintV1.py

weekStr = "星期一星期二星期三星期四星期五星期六星期日" 
weekId = eval(input("请输入星期数字(1-7):"))
pos = (weekId – 1 ) * 3
print(weekStr[pos: pos+3])
# WeekNamePrintV2.py

weekStr = "一二三四五六日"
weekId = eval(input("请输入星期数字(1-7):")) 
print("星期" + weekStr[weekId-1])

四 字符串处理函数

一些以函数形式提供的字符串处理功能

函数及使用 描述
len(x) 长度,返回字符串x的长度:len("一二三456") 结果为 6
str(x) 任意类型x所对应的字符串形式:str(1.23)结果为"1.23" str([1,2])结果为"[1,2]"
hex(x) 或 oct(x) 整数x的十六进制或八进制小写形式字符串:hex(425)结果为"0x1a9" oct(425)结果为"0o651"
chr(u) x为Unicode编码,返回其对应的字符
ord(x) x为字符,返回其对应的Unicode编码

4.1 Unicode编码

Python字符串的编码方式

  • 统一字符编码,即覆盖几乎所有字符的编码方式
  • 从0到1114111 (0x10FFFF)空间,每个编码对应一个字符
  • Python字符串中每个字符都是Unicode编码字符

4.1.1 一些有趣的例子

"1 + 1 = 2 " + chr(10004)
'1 + 1 = 2 ✔'
"这个字符♉的Unicode值是:" + str(ord("♉"))
'这个字符♉的Unicode值是:9801'
for i in range(12):
    print(chr(9800 + i), end="")
♈♉♊♋♌♍♎♏♐♑♒♓

五、字符串处理方法

"方法"在编程中是一个专有名词

  • "方法"特指<a>.<b>()风格中的函数<b>()
  • 方法本身也是函数,但与<a>有关,<a>.<b>()风格使用
  • 字符串及变量也是<a>,存在一些方法

六 字符串内置方法

一些以方法形式提供的字符串处理功能

方法及使用 描述
str.lower() 或 str.upper() 返回字符串的副本,全部字符小写/大写:"AbCdEfGh".lower() 结果为 "abcdefgh"
str.split(sep=None) 返回一个列表,由str根据sep被分隔的部分组成 :"A,B,C".split(",") 结果为['A','B','C']
str.count(sub) 返回子串sub在str中出现的次数:"a apple a day".count("a") 结果为 4
str.replace(old, new) 返回字符串str副本,所有old子串被替换为new :"python".replace("n","n456") 结果为 "python456"
str.center(width[,fillchar]) 字符串str根据宽度width居中,fillchar可选:"python".center(20,"=") 结果为 '=python='
str.strip(chars) 从str中去掉在其左侧和右侧chars中列出的字符:"= python= ".strip(" =np") 结果为

"ytho"
str.join(iter)|在iter变量除最后元素外每个元素后增加一个:str ",".join("12345") 结果为 "1,2,3,4,5" #主要用于字符串分隔等

七 字符串类型的格式化

格式化是对字符串进行格式表达的方式

  • 字符串格式化使用.format()方法,用法如下:<模板字符串>.format(<逗号分隔的参数>)
  • 字符串格式化使用f-string方法,用法如下:f<模板{<逗号分隔的参数>}字符串>

7.1 f-string方法的格式控制

{<参数序号> : <格式控制标记>}

: <填充> <对齐> <宽度> <,> <.精度> <类型>
引导符号 用于填充的单个字符 < 左对齐 > 右对齐 ^ 居中对齐 槽设定的输出宽度 数字的千位分隔符 浮点数小数 或 字符串最大输出长度 整数类型 b,c,d,o,x,X 浮点数类型e,E,f,%
"{0:=^20}".format("PYTHON")
'=======PYTHON======='
"{0:*>20}".format("BIT")
'*****************BIT'
"{:10}".format("BIT")
'BIT       '
"{0:,.2f}".format(12345.6789)
'12,345.68'
"{0:b},{0:c},{0:d},{0:o},{0:x},{0:X}".format(425)
'110101001,Ʃ,425,651,1a9,1A9'
"{0:e},{0:E},{0:f},{0:%}".format(3.14)
'3.140000e+00,3.140000E+00,3.140000,314.000000%'

八 单元小结

  • 正向递增序号、反向递减序号、<字符串>[M:N:K]
  • +、*、len()、str()、hex()、oct()、ord()、chr()
  • .lower()、.upper()、.split()、.count()、.replace()
  • .center()、.strip()、.join()、.format()格式化

“文本进度条”问题实例

用过计算机的都见过

  • 进度条什么原理呢?

1.2 需求分析

  • 采用字符串方式打印可以动态变化的文本进度条
  • 进度条需要能在一行中逐渐变化

1.3 问题分析

如何获得文本进度条的变化时间?

  • 采用sleep()模拟一个持续的进度
  • 似乎不那么难

二、"文本进度条"简单的开始

2.1 简单的开始

import time

scale = 100
sta = time.pref_counter()
print("------执行开始------")
for i in range(scale + 1):
    print(f'\r{i:^3.0f}%[{"*"*i}->{"."*(scale-1-i)}]{time.pref_counter()-sta}s',end="")
    time.sleep(0.1)
print("------执行结束------")

作业

1.获得用户输入的一个整数a,计算a的平方根,保留小数点后3位,并打印输出。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬
输出结果采用宽度30个字符、右对齐输出、多余字符采用加号(+)填充。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬
如果结果超过30个字符,则以结果宽度为准。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬

示例:
输入:10 ,输出:+++++++++++++++++++++++++3.162
x = eval(input('请输入一个整数:'))
x = pow(x,0.5)
print(f'{x:+>30.3f}')
2.获得输入的一个字符串s,以字符减号(-)分割s,将其中首尾两段用加号(+)组合后输出。

示例:
输入:Alice-Bob-Charis-David-Eric-Flurry,输出:Alice+Flurry
x = input('请输入一个字符串s:')
x = x.split('-')
print(x[0]+'+'+x[-1])
posted @ 2019-07-16 18:47  xm_lucky  阅读(136)  评论(0编辑  收藏  举报