Doing Math with Python读书笔记-第1章:Working with Numbers

基本数学运算

加减乘除为+-*/

//为floor division,即取整除,得到比除后结果小的整数:

>>> 8/3; 8//3
2.6666666666666665
2
>>> -8/3; -8//3
-2.6666666666666665
-3

%为modulo操作符,即取模。

>>> 8/3; 8%3
2.6666666666666665
2
>>> -8/3; -8%3
-2.6666666666666665
1

**为exponential操作符,即指数。

>>> 4**2; 4**(1/2)
16
2.0

操作符优先级就不说了,不清楚的话查表,建议用括号。

标记: 赋予数字名字

标记(label)也成为变量(variable)。

>>> a = 4
>>> a = a**2
>>> a
16

不同类型的数字

Python中有integer(整型)和float(浮点型)两种数字类型。两种类型可相互转换。

>>> type(4.0)
<class 'float'>
>>> type(4)
<class 'int'>
>>> type(int(4.0))
<class 'int'>

分数
分数(fraction)的处理依赖内置模块fractions。此模块定义了类Fraction。
Fraction类的定义为Fraction(numerator, denominator),其中numerator为分子,denominator为分母。
处理分数示例:

>>> from fractions import Fraction
>>> Fraction(3, 4)
Fraction(3, 4)
>>> str(Fraction(3, 4))	# 转换为字符串
'3/4'
>>> Fraction(3, 4) + 1	# 与整数运算得到Fraction
Fraction(7, 4)
>>> Fraction(3, 4) + 1.5	# 与浮点数运算得到浮点数
2.25

复数
以上讨论的都是实数(real number),复数(complex number)2 + 3i在Python中表示为2 + 3j

# 两种表示法,建议用complex()方法,因为如果虚部为变量,只能用此方法。
# 例如complex(x, y)无法写成x+yj,系统无法识别yj
>>> a = 2 + 3j
>>> type(a)
<class 'complex'>
>>> complex(2, 3)
(2+3j)
>>> complex(2, 3) == a
True

# 运算
>>> complex(2, 3) + complex(2, 5)
(4+8j)
>>> complex(2, 3) - complex(2, 5)
-2j
>>> complex(2, 3) * complex(2, 5)
(-11+16j)

## 取得实部和虚部,均为浮点数
>>> z = 2 + 3j
>>> z.real
2.0
>>> z.imag
3.0

## 共轭复数用conjugate,即实部相同,虚部相反
>>> z.conjugate()
(2-3j)

复数a+bimagnitude(a**2 + b**2)**1/2,也可以表示为abs(a+bi):

# 实数和虚数的abs()函数意义不同
>>> abs(-10)
10
>>> abs(-10.0)
10.0

>>> abs(z)
3.605551275463989

用户输入
使用input(),返回输入的字符串:

>>> a = input()
12.5
>>> type(a)
<class 'str'>
>>> a
'12.5'
>>> float(a)
12.5
>>> int(float(a))
12

使用例外处理无效输入
例外指Exception。

# 例1
>>> try:
...     a = int(input())
... except ValueError:
...     print(a, 'is invalid integer')
... 
1.1
1.1 is invalid integer

# 例2
>>> try:
...     a = float(input())
... except ValueError:
...     print(a, 'is invalid float')
... 
3/4
3/4 is invalid float

is_integter()函数仅对浮点数有效,可判断其是否为整数:

>>> 1.0.is_integer()
True
>>> 1.1.is_integer()
False

输入分数和复数

>>> a = Fraction(input('Enter a fraction: '))
Enter a fraction: 3/4
>>> a
Fraction(3, 4)

# 复数的输入不允许空格
>>> z = complex(input('Enter a complex number: '))
Enter a complex number: 2 + 3j
Traceback (most recent call last):
  File "", line 1, in <module>
ValueError: complex() arg is a malformed string
>>> z = complex(input('Enter a complex number: '))
Enter a complex number: 2+3j
>>> z
(2+3j)

使用程序做数学运算

定义一个函数:

>>> def formula(a, b):
...     return a + 2*b
... 
>>> formula(2, 3)
8

使用range产生序列:

>>> for i in range(4):
...     print(i)
... 
0
1
2
3
>>> for i in range(2, 4):
...     print(i)
... 
2
3
>>> for i in range(0, 10, 2):
...     print(i)
... 
0
2
4
6
8

计算整数的因子
以下程序factors.py寻找输入整数的因子:

def factors(b):
    '''Find the factors of an integer'''
    for i in range(1, b+1):
        if b % i == 0:
            print(i)

if __name__ == '__main__':

    b = input('Your Number Please: ')
    b = float(b)

    if b > 0 and b.is_integer():
        factors(int(b))
    else:
        print('Please enter a positive integer')

运行:

$ python3 factors.py
Your Number Please: 16
1
2
4
8
16

$ python3 factors.py
Your Number Please: 17.0
1
17

生成乘法表
以下程序multi.py生成指定整数乘以1到10的结果:

def multi_table(a):
    ''' Multiplication table printer '''
    for i in range(1, 11):
        print(f'{a} x {i} = {a*i}')

if __name__ == '__main__':
    a = input('Enter a number: ')
    multi_table(float(a))

运行:

$ python3 multi.py
Enter a number: 10
10.0 x 1 = 10.0
10.0 x 2 = 20.0
10.0 x 3 = 30.0
10.0 x 4 = 40.0
10.0 x 5 = 50.0
10.0 x 6 = 60.0
10.0 x 7 = 70.0
10.0 x 8 = 80.0
10.0 x 9 = 90.0
10.0 x 10 = 100.0

f'{a} x {i} = {a*i}'等同于'{0} x {1} = {2}'.format(a, i, a*i)
实际上,str.format()有丰富的设置,例如:

>>> a=1
>>> f'{a:.2f}'
'1.00'
>>> a=12.3456
>>> f'{a:.2f}'
'12.35'

单位换算
以下为机柜Rack Unit到厘米的换算:

def rackU_to_cms(n):
	'''convert Rack Unit to centimeters'''
    return n * 1.75 * 2.54

rackU = int(input('Please input Rack Unit:'))
print(f'{rackU}U = {rackU_to_cms(rackU)} cms')

运行:

$ python3 u2cm.py
Please input Rack Unit:1
1U = 4.445 cms

$ python3 u2cm.py
Please input Rack Unit:42
42U = 186.69 cms

求解一元二次方程
方程 a x 2 + b x + c = 0 ax^2 + bx + c = 0 ax2+bx+c=0的解有两个:
x 1 = − b + b 2 − 4 a c 2 a x_{1} = \frac{-b + \sqrt{b^2-4ac}}{2a} x1=2ab+b24ac
x 2 = − b − b 2 − 4 a c 2 a x_{2} = \frac{-b - \sqrt{b^2-4ac}}{2a} x2=2abb24ac

作者编了求解函数,用户只需输入a, b和c。

<完>

你可能感兴趣的:(Python)