1234无重复三位数python_python小白速成篇(1)

数值类型

a07dbbae2fc18ce8944fc103364c59c7.png

python的数值类型包括常规的类型:整数(没有小数部分的数字)、浮点数(通俗地说,就是有小数部分的数字)以及其它数值类型(复数、分数、有理数、无理数、集合、进制数等)。除了十进制整数,还有二进制数、八进制数、十六进制数。

1

2

3

4

5

6

7 类型 示例---------------------------------------

整数 1234, -24, 0

浮点数 1.23, 1., .2, 3.14e-10

八进制 0o177, 0O177

十六进制 0x9ff, 0X9ff

二进制 0b1010, 0B1010

需要说明的几点事项:

· python 3.x中的整数不区分一般整数和长整型整数,3.x版本中的整数支持无穷精度

· 任何时候浮点数都是不精确的。当带有小数点或科学计数的标记符号e或E,就表示这是浮点数

· 当浮点数参与表达式的运算时,会以浮点数的规则进行运算,也就是整数会转换成浮点数类型

· python中的浮点数精度和C语言的双精度浮点数精度相同

· 整数除了十进制整数外,还可以写成二进制、八进制、十六进制甚至是其它进制的整数,它们的转换方式见后文

· 当一个整数以0b0B开头,其后都是0、1时,默认识别为二进制整数

· 当一个整数以0o0O开头(数值零和大、小写的字母o),其后都是0-7之间的数值时,默认识别为8进制整数

· 当一个整数以0x0X开始,其后都是[0-9a-fA-F]之间的字符时,默认识别为十六进制

python中的数值类型是不可变对象,不可变意味着不可原处修改。假如a = 3333,那么现在内存中会有一个内存块保存数值对象3333,如果修改它,比如对它加上1操作a += 1,python将创建一个新的内存块用来保存新的数值对象3334,而不是在3333那个内存块中直接修改为3334,所以那个原始的数值3333就被丢弃了,它会等待垃圾回收器去回收。关于可变、不可变对象,后面的文章将会经常提到,请先留意这两个词。

88c8e177e32c8c4def00fafc069c36df.png

可见,python的数值计算方式非常直接,且python 3.x中会自动为整数提供无穷精度。正如上面最后一个计算表达式(3**100),它将所有数字都显示出来了。就算是计算3**100003**1000000,python也不会报错,不过3的100万次方,显然需要花上一段时间来计算。这和其它编程语言有所区别,例如java中计算Math.pow(3,10000)将返回Infinity,表示无穷大。

又是几个注意事项:

· python中的除法运算/得到的结果总是浮点数(例如9/3=3.0),后面还有一种地板除法(floor)不一样。

· 当数值部分有小数时,会自动转换为浮点数类型进行运算,而且会自动忽略参与运算的小数尾部的0

· 加号+和乘号*也能处理字符串:

· +可以连接字符串,例如"abc" + "def"得到abcdef

· *可以重复字符串次数,例如"a"*3得到"aaa""ab"*3得到"ababab"

其它数学运算方法

除了上面的基础算术运算符,还支持很多数值类型的运算符,例如:取反(~)、位移(>>)、位与(&)、位异或(^)、逻辑与(and)、逻辑或(or)

除此之外,还有几个python的内置数学函数:

1

2

3

4

5

6

7

8

9pow():求幂,如pow(2,3)=8abs():求绝对值,如abs(-3)=3round():四舍五入,如round(3.5)=4int():取整(截去小数部分),如int(3.5)=3float():转换成浮点数,如float(3)=3.0oct():十进制整数转换成八进制hex():十进制整数转换成十六进制整数bin():十进制整数转换成二进制

...等等...

还有专门的数学模块math、取随机数的模块random等。

浮点数

由于硬件的原因,使得计算机对于浮点数的处理总是不精确的。

例如,按照数学运算时,1.1-0.9=0.2,但实际得到的结果为:

1

2>>> 1.1-0.9

0.20000000000000007

它以高精度的极限趋近的值来显示。上面的趋近结果大于按照数学运算结果,但并不总是如此,例如下面的运算则是小于数学运算的结果:

1

2>>> 3.3-3.2

0.09999999999999964

由于浮点数不精确,所以尽量不要对两个浮点数数进行等值==和不等值!=比较.如果非要比较,应该通过它们的减法求绝对值,再与一个足够小(不会影响结果)的值做不等比较。

例如:

1

2

3

4

5>>> (3.2-2.8) == 0.4

False

>>> abs((3.2-2.8)-0.4) < 0.0002

True

最后,浮点数并非总是输出很长精度的值。正如前面的运算:

1

2

3

4>>> 3.2+3.26.4>>> 3/100.3

浮点数有两个特殊方法,一个是is_integer(),用来测试这个浮点数是否是整数,另一个是as_integer_ratio(),可以将浮点数转换成分子分母组成的元组,不过这个方法并非总是如你所想的那样友好。例如:

1

2

3

4

5

6

7

8

9>>> (3.0).is_integer()True

>>> (3.2).is_integer()False

>>> (2.5).as_integer_ratio()

(5, 2)

>>> (2.6).as_integer_ratio()

(5854679515581645, 2251799813685248)

浮点数总是不精确的,而且不能指定小数位数。但在python中,有一个专门的小数模块decimal,它可以提供精确的小数运算,还有一个分数模块fractions,也能提供精确的小数运算。

下期续集 python干货

需要资料的私

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值