learning python 0309


# 函数
# 计算个圆的面积
r1 = 12.34
r2 = 9.08
r3 = 73.1
#
s1 = 3.14 * r1 * r1
s2 = 3.14 * r2 * r2
s3 = 3.14 * r3 * r3

# 调用函数
# abs() 求绝对值
print(abs(-20))

# 调用函数的时候,如果传入的参数数量不对,会报TypeError的错误
# print(abs(1,-1))
# print(abs('abc'))

# max() 返回最大的参数
print(max(2,3,1,-5))

# 数据类型转换 int() float() str() bool()
print(int('123'))
print(float('12.34'))
print((str(1.23)))
print(bool(1))
print(bool('a'))
print(bool(''))
print(bool(None))

# 函数别名
a = abs
print(a(-1))

# hex()把整数转换为十六进制
n1 = 255
n2 = 1000
print(hex(n1))
print(hex(n2))

# 定义函数 def 函数名(参数):
# 在缩紧块中编写函数;返回值用 return

def my_abs(x):
    if x >= 0:
        return x
    else:
        return -x

print(my_abs(-2333))

# 如果没有return语句,函数执行完毕后也会返回结果,只是结果为None。
# return None可以简写为return。

# 回到刚开始,计算圆的面积
import math
def area(r):
    s = 3.14 * r * r
    return s


print(area(r1),s1)
print(area(r2),s2)
print(area(r3),s3)

# 空函数
# 如果想定义一个什么事也不做的空函数,可以用pass语句
# 实际上pass可以用来作为占位符,比如现在还没想好怎么写函数的代码,就可以先放一个pass,让代码能运行起来。
def nop():
    pass

# pass还可以用在其他语句里,比如:
# if age >= 18:
#     pass

# 参数检验 调用函数时,如果参数个数不对,Python解释器会自动检查出来,并抛出TypeError
# print(my_abs(1,2))
# TypeError: my_abs() takes 1 positional argument but 2 were given

# 当传入了不恰当的参数时,内置函数abs会检查出参数错误,而我们定义的my_abs没有参数检查,会导致if语句出错
# print(my_abs('z'))
# TypeError: '>=' not supported between instances of 'str' and 'int'

# 使用isinstance()检查数据类型
def my_abs2(x):
    if not isinstance(x, (int, float)):
        raise TypeError('bad operand type')
    if x >= 0:
        return x
    else:
        return -x

print(my_abs2(-233))
# print(my_abs2('z'))
# TypeError: bad operand type

# 返回多个值
import math
def move(x, y, step, angle=0):
    nx = x + step * math.cos(angle)
    ny = y - step * math.sin(angle)
    return nx, ny

x, y = move(100, 100, 60, math.pi / 6)
print(x, y)

# 但其实这只是一种假象,Python函数返回的仍然是单一值,是一个tuple(在语法上,返回一个tuple可以省略括号)

r = move(100, 100, 60, math.pi / 6)
print(r)

# 练习: 请定义一个函数quadratic(a, b, c),接收3个参数,返回一元二次方程 ax^2 + bx + c = 0
def quadratic(a, b, c):
    x1 =(-b + math.sqrt(b*b-4*a*c)) / (2*a)
    x2 =(-b - math.sqrt(b*b-4*a*c)) / (2*a)
    return x1, x2

a1 = quadratic(2,3,1)
a2 = quadratic(1,3,-4)

if a1 != (-0.5, -1.0):
    print('测试失败')
elif a2 != (1.0, -4.0):
    print('测试失败')
else:
    print(('测试成功'))

声明:自在独行|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - learning python 0309


海阔凭鱼跃,天高任鸟飞