MOOC Python语言程序设计笔记 第三章 基本数据类型

数字类型及操作
整数类型
可正负
pow(x,y):计算X的y次方
四种进制表示形式:
十进制:1010
二进制:0b或0B开头,-0B101
八进制:0o或0O开头
十六进制:0x或0X开头
浮点数类型
即实数概念,带有小数点及小数的数字。浮点数取值范围和小数精度都存在限制,但通常可以忽略
取值范围约-10308至10308,精度数量级10^(-16)
注意:浮点数间运算存在不确定尾数,不是bug(经过各种二进制和十进制的转换)
>>>0.1+0.3
0.4
>>>0.1+0.2
0.300000000000004

round(x,d):对x四舍五入,d是小数截取位数
浮点数间运算及比较用round()函数辅助
不确定尾数一般发生在10^(-16)位产生,round十分有效
浮点数可以用科学计数法表示,使用字母e或E作为幂的符号,以10为基数:e 表示a10^b
如4.3e(-3)值为0.0043
复数类型
别的编程软件都没有
a+bj被称为复数,其中a是实部,b是虚部
z.real获得实部,z.imag获得虚部
数值运算操作符
x+y
x-y
x
y
x/y 浮点数结果,一般软件里不是这样
x//y 整数除 只保留整数位
+x x本身, -y y的负数
x%y余数,模运算
xy 幂运算
二元增强赋值操作符,两个数进行运算,去更改其中一个值 增强赋值形式
数字类型的关系:类型间可以混合运算,生成结果为最宽类型。整数→浮点数→复数
123+4.0=137.0
数值运算函数
abs(x) 绝对值
divmod(x,y) 商余(x//y,x%y),同时输出商和余数
pow(x,y,[z])幂余,(x
y%z)[…]表示参数z可以省略
pow(3,pow(3,99),10000)结果为4587
有余操作,比如此例中,x**y的数值会非常大,计算机无法计算,转化为余数的计算能非常迅速。这个相当于求解这个幂结果的最后四位
round(x[,d])
max(X1,X2,…,Xn) max(X1,X2,…,Xn)
int(x) 将x变成整数,舍弃小数部分
float(x)将x变成浮点数,增加小数部分,float(“1.23”)结果为1.23;float(12)为12.0
complex(X)将x变成复数,增加虚数部分 complex(4) 结果为4+0j

实例3:天天向上的力量
#Daydayup1.py
dayup= pow(1.01,365)
daydown= pow(0.999,36)
print(“向上:{:.2f},向下:{:.2f}”.format(dayup, daydown))

#2
dayfactor=0.005
dayup=pow(1+dayfactor, 365)
daydown=pow(1-dayfactor,365)
print(“向上:{:.2f},向下:{:.2f}”.format(dayup,daydown)

#3
A君每天进步1%,B君只工作日努力X%,周末退步1%
问B君的X值多少时,才能和A有同样的进步

def…while…

#Daydayup4.py 注意冒号!
def dayUP(df): def定义函数,根据df参数计算工作日力量
dayup=1
for i in range(365):
if i %7 in [6,0]: i不是应该从0开始到364的吗?
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))

假设自己画画是三天打鱼两天晒网状态: 5.7 大概是是37.78的七分之一
#Santiandayu
day=1
for i in range (365):
if i%5 in [1,2,3]:
day=day*(1+0.01)
else:
day=day*(1-0.003)
print(“实际效果为:{:.3f}”.format(day))

if和while有什么区别??

字符串类型及操作
字符串类型的表示
0个或多个字符组成的有序字符序列
由一对单引号或者一对双引号表示 “C”
字符串是字符的有序序列,可以对其中的字符进行索引,编号从0开始

字符串有2类,共四种
有一对单引号或双引号表示,仅表示单行字符串
由一堆三单引号或三双引号表示,表多行字符串.如果这个字符串没有另外再作用,就可以当做注释来用

如果希望在字符串中包含双引号或者单引号,在字符串内容的外面就对应使用另外一种引号
如果字符串中既有“又有’ 用’’‘表示字符串’’’

字符串的序号:正向增序序号,“反响递减序号
[]获取字符串中的一个或多个字符 索引及切片
[M:N:K]根据步长对字符串切片:
[M:N] M却是表至开头,N缺失表至结尾
[M:N:K] k为步长 〇一二三十五六七八九十 [1:8:2] 结果是一三五七
[::-1] 表示从开头到结尾,步长为-1表示整个倒序
转义符\ 此符号后面的特定字符会表达特定字符的本意
\b 回退 \n换行(移动到下一行行首) \r回车(移动到本行行首)

操作符
由0个或者多个字符组成的有序字符序列
x+y 连接两个字符串
nx或xn 复制n次字符串x
x in s 如果x是s的子串,返回True,否则返回False

实例:获取星期字符串

思路:给出一个长字符串,然后切片输出。避免了连续的if else的重复
注意:input函数获得的输入会被保存为字符串的形式 用eval把他变成数字

处理函数
len(x) 返回字符串x的长度,数字标点英文汉字都是算一个字符
str(x) 任意类型x所对应的字符串形式(和eval功能相反)
hex(x)或oct(x) 整数x的十六进制或者八进制小写形式字符串
hex(425) 0x1a9 oct(425)0o651
chr(u) u为Unicode编码,返回其对应的字符
ord(x) x为字符,返回其对应的Unicode编码

          Python字符串的编码方式:Unicode  统一字符编码 几乎所有字符
                                                      0-1114111(0x10FFFF)
           例子:输出十二星座的符号
                    我的代码:u=9800
                                      for i in range (12):
                                           print("十二星座符号:"+chr(u))
                                           u=u+1
                    老师的代码

                                         end=""  表示输出一个之后不换行

处理方法

           方法必须要用 . 执行   一共八个
           str.lower()或str.upper()  返回字符串的副本,全部字符小写或者大写
           str.split(sep=None) 返回一个列表 字符串根据sep被分割的部分组成   "A,B,C".split(",") 
                                             结果为['A','B','C']
           str.count(sub)返回子串sub在str中出现的次数 返回子串sub在str中出现的次数  
                                           "a apple a day".count("a")   结果为4
           str.reolace(old,new)  返回字符串str副本,所有old子串被替换为new
           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方法形成字符串的格式化

            槽内部对格式化的配置方式  {<参数序号>:<格式控制标记>} 

: 填充 对齐 宽度 , <.精度> 类型
引导符号 用于填充的单个字符 < ^ > 槽设定的输出宽度 千位分隔符 浮点数小数精度或字符串最大输出长度 整数类型 b,c,d,o,x,X浮点数类型

               前三个:

             注释:最后一个例子,默认空格填充,左对齐

time库的使用
time库
处理时间的标准库
计算机时间的表达
提供获取系统时间并格式化输出功能
提供系统级精确计时功能,用于程序性能分析
import time
time.()
time库包括三类函数
时间获取: time() ctime() gmtime()
时间格式化: strftime() strptime()
程序计时: sleep() perf_counter()
time.time() 获得当前时间戳,计算机内部时间值,浮点数 1970.1.1 0:0到现在的秒数
time.ctime() 获取当前时间 返回字符串 ‘Fri Jan 26 12:11:16 2018’
time.gmtime() 表示为计算机可处理的时间格式
time.struct_time(tm_year=2018, tm_mon=1,tm_mday=4,tm_hour=4,tm_min=11,tm_sec=16,tm_wday=4,tm_yday=26,tm_isdst=0)
时间格式化
类似字符串格式化,要有展示模板
展示模板由特定的格式化控制符组成
strftime()方法
strftime(tpl,ts) tpl定义输出效果,格式化模板字符串 ts计算机内部时间类型变量
t=time.gmtime()
time.strftime("%Y-%m-%d %H:%M:%S",t)
‘2018-01-26 12:55:20’
格式化字符串: %Y %m %B(月份名称) %b(月份名称缩写) %d
%a 星期缩写 %H小时(24) %h(12) %p 上下午(AM,PM) %s

     特殊情况下会有反格式化过程,将字符串变成时间
             strptime(str,tpl)  str 字符串形式的时间值   tpl是格式化模板字符串,用来定义输入效果
                                       timeStr='2018-01-26 12:55:20'
                                       time.strptime(timeStr, "%Y-%m-%d  %H:%M:%S")                                                       time.struct_time(tm_year=2018,tm_mon=1,tm_mday=26,tm_hour=4,tm_min=11,tm_sec=16,tm_wday=4,tm_yday=26,tm_isdst=0)

程序计时
测量时间perf_counter() CPU级别的精确时间计数值,单位为秒,由于计数起点不确定,要连续调用差值(第一次调用的值作为起点)
start=time.perf_counter()
318.66599499718114
end=time.perf_counter()
341.3905185375658
end- start
22.724523540384666
产生时间: sleep()
sleep(s) s拟休眠的时间,单位是秒,可以是浮点数
def wait():
time.sleep(3.3)
wait() #程序等待3.3秒后再退出

例子:文本进度条 采用字符串方式打印可以动态变化的文本进度条 要能逐渐变化
TextProgress1自己写的:

      #Textprogress
      import time
      scale=10
      print("{0:-^16}".format("执行开始"))
      for i in range(scale+1):
            a='#'*i
            b='.'*(scale-i)
            c=str(10*i)
      print("{0: >4} [{1:}->{2:}]".format(c+"%",a,b))
      print("{0:-^16}".format("执行结束"))
      红行报错原因:ValueError: cannot switch from automatic field numbering to manual field specification。此问题是format()函数 前面大括号里 没写 数字 对应后面的 ()的顺序的值
      老师的: {:^3.0f是什么意思?}

TextProgress2:
单行动态刷新:
刷新本质:用后打印的字符覆盖之前的字符
不能换行:print()需要被控制
要能回退:打印后光标退回到之前的位置 \r
在idle中\r的功能会被屏蔽掉(只是个编写软件),所以执行出来没有单行动态刷新的状态
end="" 如果不写,默认每一次输出后会换行,写了这个代表返回行首

TextProgress3: 注意,要在“命令提示符”执行 结果才对。有\r
import time
scale=50
print(“执行开始”.center(scale//2,"-"))
start = time.perf_counter()
for i in range(scale+1):
a=’*‘i
b=’.’
(scale-i)
c=(i/scale)*100
dur=time.perf_counter() - start
print("\r{:^3.0f}%[{}->{}]{:.2f}s".format(c,a,b,dur),end="")
time.sleep(0.1)
print("\n"+“执行结束”.center(scale//2,’-’))
举一反三
perf_counter()计时:统计时间的计算问题,比较不同算法时间,统计部分程序运行时间
需求:运行时间较长的程序、希望提高用户体验的程序,人机交互的纽带
用于生活中时,进度套也不一定就要忠实的反应程序的进度

错题:答案PYTHON
s=‘PYTHON’
print("{0:3}".format(s))

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值