5.基本数据类型
5.1数字类型及操作
5.1.1整数 - 与数学中整数概念一致,没有取值范围限制,可正可负
-pow(x,y)函数:计算 xy,想算多大算多大
-四种进制表示形式:
十进制:1010, 99, -217
二进制,以0b或0B开头:0b010, -0B101
八进制,以0o或0O开头:0o123, -0O456
十六进制,以0x或0X开头:0x9a, -0X89
5.1.2浮点数 - 带有小数点及小数的数字
- 浮点数取值范围和小数精度都存在限制,但常规计算可忽略,即基本无限制
- 取值范围数量级约-10^307至10^308,精度数量级10^-16
-浮点数间运算存在不确定尾数,不是bug:
>>> 0.1+0.3
0.4
>>> 0.1+0.2
0.30000000000000004
加粗为不确定尾数,故需要注意的:
>>> 0.1 + 0.2 == 0.3 False
>>> round(0.1+0.2, 1) == 0.3 True
- round(x, d):对x四舍五入,d是小数截取位数
- 浮点数间运算与比较用round()函数辅助
- 不确定尾数一般发生在10^-16左右,round()十分有效
5.1.3复数 - z = 1.23e-4+5.6e+89j
- 实部: z.real 获得实部
- 虚部: z.imag 获得虚部
5.1.4数值运算操作符
操作符及使用 | 描述 |
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 | X的负值 |
x%y | 余数,模运算 10%3结果是1 |
X**y | 幂运算,x的y次幂,x^y 当y是小数时,开方运算10**0.5结果是 |
二元操作符有对应的增强赋值操作符:
增强操作符及使用 | 描述 |
x op= y
| 即 x = x op y,其中,op为二元操作符 |
x += y x -= y x *= y x /= y x //= y x %= y x **= y | |
>>> x = 3.1415 >>> x **= 3 # 与 x = x **3 等价 31.006276662836743 |
类型间可进行混合运算,生成结果为"最宽"类型 :整数 -> 浮点数 -> 复数
例如:123 + 4.0 = 127.0 (整数+浮点数 = 浮点数)
5.1.5数值运算函数
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, … ,xn):最大值,返回x1,x2, … ,xn中的最大值,n不限 max(1, 9, 5, 4, 3) 结果为 9 min(x1,x2, … ,xn):最小值,返回x1,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
5.2示例3:天天向上的力量Q4
工作日模式(工作日1-5每天努力提高a%,周末6-7每天下降1%)
365模式(每天努力提高1%)
问a为几时,工作日模式与365模式的提高程度相等?
#DayDayUpQ4.py
def dayUP(df): #def保留字用于定义函数
dayup = 1
for i in range(365):
if i %7 in [6,0]:
dayup = dayup*(1-0.01)
else:
dayup = dayup*(1+df)
return dayup
dayfactor = 0.01
while dayUP(dayfactor) < 37.78:
dayfactor += 0.001
print("工作日的努力参数是:{:.3f}".format(dayfactor))
结果:工作日的努力参数是:0.019
5.3字符串类型及操作
5.3.1字符串类型的表示
字符串有2类 共4种表示方法 :
- 由一对单引号或双引号表示,仅表示单行字符串 "请输入带有符号的温度值: " 或者 'C'
- 由一对三单引号或三双引号表示,可表示多行字符串 ''' Python 语言 '''
Q:- 如果希望在字符串中包含双引号或单引号呢?
'这里有个双引号(")' 或者 "这里有个单引号(')"
- 如果希望在字符串中既包括单引号又包括双引号呢?
''' 这里既有单引号(')又有双引号 (") '''
字符串的序号:可参见笔记1:
正向递增序号(头从0开始递增) 和 反向递减序号(尾部-1开始递减)
字符串的使用:
- 索引:返回字符串中单个字符 <字符串>[M]
"请输入带有符号的温度值: "[0] 或者 TempStr[-1]
- 切片:返回字符串中一段字符子串 <字符串>[M: N] (表示字符串序号从M到N,但不包含序号N的字符)
例如:"请输入带有符号的温度值: "[1:3] 或例如: TempStr[0:-1]表示除去最后一位的其他位
- <字符串>[M: N],M缺失表示至开头,N缺失表示至结尾
例"〇一二三四五六七八九十"[:3] 结果是 "〇一二"
-字符串切片高级用法:使用<字符串>[M: N: K]根据步长对字符串切片
例"〇一二三四五六七八九十"[1:8:2] 结果是 "一三五七"
"〇一二三四五六七八九十"[::-1] 结果是 "十九八七六五四三二一〇"
字符串的特殊符号:
- 转义符表达特定字符的本意
"这里有个双引号(\")" 结果为:这里有个双引号(")
- 转义符形成一些组合,表达一些不可打印的含义
"\b"回退 "\n"换行(光标移动到下行首) "\r" 回车(光标移动到本行首)
5.3.2字符串操作符
操作符及使用 | 描述 |
x + y | 连接两个字符串x和y |
n * x 或 x * n | 复制n次字符串x |
x in s | 如果x是s的子串,返回True,否则返回False |
示例:获取星期字符串
输入:1-7的整数,表示星期几
输出:输入整数对应的星期字符串
例如:输入3,输出 星期三
#WeekNamePrintV1.py
weekStr = "星期一星期二星期三星期四星期五星期六星期日"
weekId = eval(input("请输入星期数字(1-7):"))
pos = (weekId – 1 ) * 3 #pos为星期?的首位
print(weekStr[pos: pos+3])
#WeekNamePrintV2.py
weekStr = "一二三四五六日"
weekId = eval(input("请输入星期数字(1-7):"))
print("星期" + weekStr[weekId-1])
5.3.3字符串处理函数
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编码
Unicode编码:Python字符串的编码方式
- 统一字符编码,即覆盖几乎所有字符的编码方式
- 从0到1114111 (0x10FFFF)空间,每个编码对应一个字符
- Python字符串中每个字符都是Unicode编码字符
示例:
>>> "1 + 1 = 2 " + chr(10004) '1 + 1 = 2 ✔
>>> "这个字符♉的Unicode值是:" + str(ord("♉")) '这个字符♉的Unicode值是: 9801
>>> for i in range(12): print(chr(9800 + i), end="")
打印12星座:
5.3.4字符串处理方法
方法是什么:- "方法"特指<a>.<b>()风格中的函数<b>(),本身也是函数。
一些以方法形式提供的字符串处理功能:
5.3.5字符串类型的格式化
- 字符串格式化使用.format()方法,用法如下: <模板字符串>.format(<逗号分隔的参数>)
示例:
5.3.6小结: