最近在学习慕课上的公开课《Python语言程序设计》,该课程是国家精品,由来自北京理工大学的 嵩天团队精心打造,讲解清晰,层层递进,想跟我一起学习的可点击蓝色课程名称直接跳转到该课程页面。以下是个人学习的笔记,如有错误,敬请指正。
Python基本数据类型
整数类型
4种进制表示形式
-十进制:999,-23,1001
-二进制,以0b或0B开头:0b010,0B100
-八进制,以0o或0O开头:0o123,0O456
-十六进制,以0x或0X开头:0x9c,0Xa5
浮点类型
与数学中实数的概念一致
-带有小数点及小数的数字
-浮点数取值范围和小数精度都存在限制,但常规计算可忽略
-八进制取值范围数量级约-至,精度数量级
浮点数间运算存在不确定尾数,这不是bug
例如0.1+0.2=0.30000000000000004
-round(x,d):对x四舍五入,d是小数截取位数
-浮点数间运算及比较用round()函数辅助
-浮不确定函数一般发生在左右,round()十分有效
浮点数可以采用科学技术法表示
-使用e或E作为幂的符号,以10为基数,格式如下:
<a>e<b>,表示a*
-例如:4.3e-3值为0.0043,9.6E5值为960000.0
浮点类型
与数学中复数的概念一致
复数实例
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.3333333333333333 |
x // y | 整数除,x与y之整数商 10//3的结果是3 |
+ x | x本身 |
- y | y的负值 |
x % y | 余数,模运算 10%3的结果是1 |
x ** y | 幂运算,x的y次幂,,当y是小数时,开放运算 |
二元操作符有对应的增强赋值操作符
操作符及使用 | 描述 |
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 (整数 + 浮点数 = 浮点数)
数值运算函数
一些以函数形式提供的数值运算功能
函数及使用 | 描述 |
abs(x) | 绝对值,x的绝对值 abs(-10.01)的结果为10.01 |
divmod(x,y) | 商余,(x//y,x%y),同时输出商和余数 divmos(10,3)的结果为(3,1) |
pow(x,y[,z]) | 幂余,(x**y)%z,[,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,4,6,8,9,3)结果为3 |
min(x1,x2,...,xn) | 最小值,返回x1,x2,....xn中的最大值,n不限 min(1,4,6,8,9,3)结果为1 |
int(x) | 将x变成整数,舍弃小数部分 int(12.35)结果为12;int("123")结果为123 |
float(x) | 将x变成浮点数,增加小数部分 float(12)结果为12.0;float("1.23")结果为1.23 |
complex(x) | 将x变成复数,增加虚数部分 complex(4)结果为4 + 0j |
实例
问题1:
一年365天,每天进步1‰,一年累计下来是多少?
一年365天,每天退步1‰,一年累计下来是多少?
#DayDayUpQ1.py
dayup = pow(1.001, 365)
daydown = pow(0.999, 365)
print("向上:{:.2f}, 向下:{:.2f}".format(dayup, daydown))
问题2:
一年365天,每天进步5‰或1%,一年累计下来是多少?
一年365天,每天退步5‰或1%,一年累计下来是多少?
#DayDayUpQ2.py
dayfactor = 0.005
dayup = pow(1+dayfactor, 365)
daydown = pow(1-dayfactor, 365)
print("向上:{:.2f}, 向下:{:.2f}".format(dayup, daydown))
问题3:
一年365天,一周5个工作日,每天进步1%,
一年365天,一周2个休息日,每天退步1%,一年下来是多少?
#DayDayUpQ3.py
dayup = 1.0
dayfactor = 0.01
weeknum = (365//7)
for i in range(365):
if i % 7 in [6, 0]:
dayup = dayup*(1-dayfactor)
else:
dayup = dayup*(1+dayfactor)
print("工作日的力量:{:.2f}".format(dayup))
问题4:
工作日模式要努力到什么程度,才能与每天努力15一样?
A:一年365天,每天进步1%,不停歇
B:一年365天,每周工作5天休息2天,休息日每天退步1%,工作日要多努力才能与A一样?
#DayDayUpQ4.py
def dayUP(df):
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: # pow(1.01, 365)结果是37.78
dayfactor += 0.001
print("工作日的努力参数是:{:.3f}".format(dayfactor))
字符串类型及操作
字符串 有两类 共4种表示方法
-由一对单引号或一对双引号表示,仅表示单行字符串
"请输入带有符号的温度值:"或者‘C’
-由一对三单引号或一对三双引号表示,可以表示多行字符串
'''Python
语言'''
注:我们经常会遇到用三单引号做多行注释,实际上Python语言中并没有真正的提供多行注释的表式方式,三单引号构成的就是字符串,但是如果在程序中出现了一个字符串,这个字符串并没有给到某一个变量中或者这个字符串并没有进行任何操作,那么它可以当作注释来使用,因此说三单引号形成是字符串,知识它的作用可以当作注释。
为什么Python提供了两类四种字符串表示方式呢?
-如果希望在字符串中包含单引号或双引号呢?
"这里有个单引号(')"或者‘这里有个双引号(")’
-如果希望在字符串中既包含单引号又包含双引号呢?
'''这里既有单引号(')又有双引号(")'''
字符串序号类型有 正向递增序号和反向递减序号
正向递增序号从0开始按从左往右顺序逐一递增,反向递减序号从-1开始按从右往左顺序逐一递减。
使用[]获取字符串中一个或多个字符
-索引,返回字符串中单个字符,<字符串>[M]
"请输入带有符号的温度值:"[0]或者TempStr[-1]
-切片,返回字符串中一段字符串,<字符串>[M:N]
"请输入带有符号的温度值:"[0:3]或者TempStr[0:-1]
使用[M:N:K]根据步长对字符串切片
-<字符串>[M:N],M缺失表示至开头,N缺失表示至结尾
"O一二三四五六七八九十"[0:3]结果是"O一二"
-<字符串>[M:N:K],根据步长K对字符串切片
"O一二三四五六七八九十"[1:8:2]结果是"一三五七"
-字符串逆向排序
"O一二三四五六七八九十"[::-1]结果是"十九八七六五四三二一O"
特殊字符 转义符\
-转义符表达特定字符的本意,转义符\之后的字符会被当做字符本意来理解
"这里有个双引号(\")" 结果为 这里有个双引号(")
-转义符形成一些组合,表达不可打印的含义
"\b"回退 "\n"换行(光标移动到下行首) "\r"回车(光标移动到本行首)
由0个或多个字符组成的有序字符序列
操作符及使用 | 描述 |
x + y | 即连接两个字符串x和y |
n * x 或x * n | 复制n次字符串 |
X in S | 如果x是s的字串。返回True,否则返回False |
获取星期字符串
#WeekNamePrintV1.py
weekStr = "星期一星期二星期三星期四星期五星期六星期日“
weekId = evaluate(input(”请输入星期数字(1-7):"))
pos = (weekId-1) * 3
print(weekStr[pos:pos+3])
#WeekNamePrintV2.py
weekStr = "一二三四五六日"
weekId = eval(input(”请输入星期数字(1-7):"))
print("星期" + weekStr[weekId-])
一些一函数形式体提供的字符串处理功能
函数及使用 | 描述 |
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) | u为Unicode编码,返回其对应的字符 |
ord(x) | x为字符,返回其对应的Unicode |
Python字符串的编码方式-Unicode编码
-统一字符编码,即覆盖几乎所有字符的编码方式
-从0到1114111(0x10FFFF)空间,每个编码对应一个字符
-Python字符串中每一个字符都是Unicode编码字符
Unicode编码一些有趣例子
>>>"1 + 1 = 2" + chr(10004)
'1 + 1 = 2 √'
>>>"这个字符♉的Unicode值是:" + str(ord("♉"))
'这个字符♉的Unicode值是: 9801'
>>> for i in range(12): #打印每一个星座对应的符号
print(chr(9800 + i),end="")
一些以方法形式提供的字符串处理功能
方法及使用 | 描述 |
str.lower()或str.upper() | 返回字符串的副本,全部字符为小写/大写 "AbcCdEfgH".lower()结果为"abcdefgh" |
str.split(sep=None) | 返回一个列表,由str根据sep被分隔的部分组成 "A,B,C"split(",")结果为['A','B',''C] |
str.count(sub) | 返回字串sub在str中出现的次数 "an apple a day".count(a)结果为4 |
str.replace(old,new) | 返回字符串str副本,所有old字串被替换为new "python".replace("n","n123.io")结果为"python123.io" |
str.center(width[,fillchar]) | 字符串str根据宽度width居中,fillchar可选 "python".center(20,"=")结果为'=======python=======' |
str.strip(char) | 从str中去掉其在左侧和右侧chars中列出的字符 "= python=".strip(" =np")结果为"ytho" |
str.join(iterzai) | 在iter变量除最后元素外每个元素后增加一个str ",".join("12345")结果为 "1,2,3,4,5" #主要用于字符串分隔等 |
格式化是对字符串进行格式化表达的方法
-字符串中格式化是使用.format()方法,用法如下:
<模板字符串>.format(<逗号分隔的参数>)
-一个概念——槽
槽:相当于一个占位信息符,使用一对大括号"{}"来表示,它只在字符串中有用。
format()中参数顺序从左往右依次为0123...,字符串中槽{}捏如果不填则默认顺序从左往右为0123...,也可以在槽{}中按需要填入format()中的参数序号
: | <填充> | <对齐> | <宽度> | <,> | <.精度> | <类型> |
引导号 符号 | 用于填充的 单个字符 | <左对齐 >右对齐 ^居中对齐 | 槽设定的 输出宽度 | 数字的千位分隔符 | 浮点数小数精度或字符串最大输出长度 | 整数类型b,c,d,o,x,X;浮点数类型e,E,f,% |
注意:所有标点符号均为英文状态下符号
详细参考:Python语言程序设计_中国大学MOOC(慕课) (icourse163.org)
time库的使用
文本进度条