由于也是初学python,所以在这里简要介绍一下python基础的数据类型,好在宏观上有个把握。

整数类型

python里面的整数类型可正可负,不像其他的语言,python的整数并没有取值范围的限制。如:pow(x,y)函数用来计算x的y次方。
整数类型的4种表示形式:
+++++十进制:1010,99,-217
+++++二进制:0b或0B开头,如 0b101,-0B110
+++++八进制:0o或0O开头,如 0o123,-0O345
+++++十六进制:以0x或0X开头,如 0x9a,-0x89

浮点数类型

浮点数的取值范围和小数精度都存在限制,但常规计算中可忽略这种限制。
取值范围数量级约-10^308到 10^308,精度数量级10^-16。

不确定尾数

浮点数间的运算存在不确定尾数,这不是bug,不确定尾数在很多编程语言都存在。
也就是当某个浮点数并不能被2进制精确表示的时候,就会出现不确定尾数。什么叫精确表示呢?
因为十进制数和二进制数之间不存在一一映射的关系,所以某些十进制数是不能被二进制精确表示的,而只能近似表示,这样就造成了计算的二进制结果是十进制结果的一个近似数。如0.1表示为二进制的数时,是无限的,可以无限接近0.1但不等于0.1。不确定尾数出现在10^(-16)

0.1+0.2
0.30000000000000004

那语句 0.1+0.2 ==0.3呢? 判断为False
此时可以使用round(x[,d])对x四舍五入,d是小数保留的位数。默认取整,[,d]表示可有可无。

>>> (0.1+0.2)==0.3
False
>>> round(0.2+0.1,1)==0.3
True

浮点数与科学计数法

浮点数可以使用科学计数法表示。
aeb 表示a*10^b

>>> 1.234e2
123.4

复数类型

表示为a+bj
z.real,获得实部
z.imag,获得虚部
3种数据类型的可以看成逐渐扩展的关系。
整数 —》浮点数—》复数,提到这个的主要原因是,不同类型的数据进行运算时,遵循向上提升的规则。这样不会造成数据的丢失。
一个小例子来直观的感受一下:

>>> z = 3+4j
>>> z.imag
4.0
>>> z.real
3.0
>>>

运算操作符

+,-,,/,//表示整除,%取模,*幂运算。3^2 在python中表示为3**2或者用pow(3,2)。

字符串

字符串的表示

字符串既可以(1)使用2个”符号括起来表示,形式上就是:”<你要表达的字符串>”,也可以(2)使用2个’符号括起来表示,形式上就是:
‘<你要表达的字符串>’,前面2中表示方法是用来表示单行字符串的;还可以(3)使用2个”’符号括起来表示,形式上就是:”’<你要表达的字符串>”’,值得注意的该表示可以用来表达多行字符串。而表示形式(1)(2)只能表示单行字符串。
之所以有(1)(2)这2种表达单行字符串的,是因为在字符串中包含另一种引号时会比较方便。

>>> str ="woyou ge ' "
>>> print(str)
woyou ge '

索引和切片

索引可以用来访问字符串的某一个元素:如 str[2]即代表访问str的第3个元素;python中数组的下标都是从0开始的。
切片用来截取字符串的某一段元素:如 str_name[1:4],访问str的第2个到第4个元素,即str[1],str[2],str[3]3个元素,但并不包括下标4对应的元素。这是需要注意的。

>>> str='123456'
>>> type(str)
<type 'str'>
>>> str[1:4]
'234'
>>>

字符串切片的高级用法

[M:N:K]根据步长对字符串切片,
M,N分别表示切片的起点和终点(不包括终点所对应的元素),M缺失表示至开头,N缺失表示至结尾,K表示步长,即隔几个元素取一个元素。
str_name[::-1]逆序字符串str_name
当然如果我想取字符串从第3个元素到最后的片段,那么可以使用str_name[2:],就行了。

字符串处理函数1


len(str_name):返回字符串的长度
str(x): 将任何数据类型的x都转换为字符串
hex(x): 整数x转为十六进制
oct(x): 整数x转为八进制
chr(u): u为unicode编码,返回其对应的字符
ord(x):返回x对应的Unicode编码


小例子:显示12个星座对应的字符

这里介绍一个小例子来体会一下,其中通过在print函数中指定end属性值为end=”“可以使得for循环的输出都在同一行显示。

for i in range(12):
    print(chr(9800+i),end="")

字符串处理方法

这些都是以方法形式提供的字符串处理功能。

python浮点数有最大值限制吗 python浮点数的取值范围_python的基本的数据类型


python浮点数有最大值限制吗 python浮点数的取值范围_python浮点数有最大值限制吗_02


python浮点数有最大值限制吗 python浮点数的取值范围_python浮点数有最大值限制吗_03

字符串格式化

str_name.format()

槽用‘{}’来表示,表示为format中的参数占位。

如果没有在槽中明确指定该槽放置哪个序号的参数,就按照序号顺序依次填充。换句话说,就是第一个槽对应显示第一个参数,第二个槽对应显示第二个参数,以此类推。用图表示为如下:

python浮点数有最大值限制吗 python浮点数的取值范围_浮点数_04


但是如果明确指出了槽内对应的参数编号,那么就按照指定的序号来格式化显示字符串。

python浮点数有最大值限制吗 python浮点数的取值范围_python的基本的数据类型_05

槽内部对字符串格式化

python浮点数有最大值限制吗 python浮点数的取值范围_python_06


如上面所展示的,如果要对某个槽进行格式化,那么可以在“:”后面添加格式控制标记。“:”前面若不指定参数序号则按默认的来对应参数。

那“:”后面究竟能够指定哪些格式化参数呢?

python浮点数有最大值限制吗 python浮点数的取值范围_python的基本的数据类型_07


需要注意的是,这些格式化参数如果有是需要按照上图的顺序依次填写的,否则就会报错。

>>> "{:=^20}".format("python")
'=======python======='
>>> "{:=20^}".format("python")
ValueError: Unknown format code '^' for object of type 'str'

这里再贴出几个例子,以便深刻地理解。

python浮点数有最大值限制吗 python浮点数的取值范围_python的基本的数据类型_08

python练习程序

练习1

有一个问题:如下描述,
A 每天都进步1%。
B 工作5天,周末休息,休息时会退步1%,那么工作日需要进步多少才能和达到和A一样的进步?

#daydayup.py
# 计算工作5天休息2天总的进步
def dayUp(df):
    dayup = 1
    for i in range(365):
        if i % 7 in [0,6]:
            dayup = dayup *(1-0.01)
        else:
            dayup = dayup *(1+df)
    return dayup
#计算连续工作365天的进步
dayup_a = 1.0
dayup_a = (dayup_a+0.01)**365
# 37.78
print("dayup_a is :",dayup_a)

dayfactor = 0.01
while dayUp(dayfactor) < dayup_a:
    dayfactor += 0.001
print("工作日应该达到的目标为: ".format(dayfactor))

练习2

这里显示一个如图所示的字符串,要求每隔1s显示一行。

python浮点数有最大值限制吗 python浮点数的取值范围_字符串_09

import time

print("start".center(20,'-'))
scale = 10
for i in range(scale+1):
    m = '*' * i
    n = '.' * (scale-i)
    ratio = (i/scale)*100
    print("{:^3.0f}%[{}->{}]".format(ratio,m,n))
    time.sleep(1)
print("end".center(20,'-'))
~

练习3

针对练习2的改进,使得字符串刷新以后还能在同一行显示,看起来就像是覆盖了之前在屏幕该行的内容。

python浮点数有最大值限制吗 python浮点数的取值范围_浮点数_10

import time

print("start".center(20,'-'))
scale = 10
for i in range(scale+1):
    m = '*' * i
    n = '.' * (scale-i)
    ratio = (i/scale)*100
    print("\r{:^3.0f}%[{}->{}]".format(ratio,m,n) , end="")
    time.sleep(1)
print('\n')
print("end".center(20,'-'))