中国铁建门户网登录入口,百度seo关键词排名,完整的外贸出口流程,网站抓取诊断ip出错[重学Python]Day3 函数和模块的使用 一、函数的作用二、定义函数三、函数的参数四、用模块管理函数五、练习#xff08;一#xff09;实现计算最大公约数和最小公倍数的函数#xff08;二#xff09;、实现判断一个数是不是回文数的函数#xff08;三#xff09;、实现判… [重学Python]Day3 函数和模块的使用 一、函数的作用二、定义函数三、函数的参数四、用模块管理函数五、练习一实现计算最大公约数和最小公倍数的函数二、实现判断一个数是不是回文数的函数三、实现判断一个数是不是素数的函数四、写一个程序判断输入的正整数是不是回文素数 项目链接https://github.com/jackfrued/Python-100-Days
一、函数的作用
“代码有很多种坏味道重复是最坏的一种”
为了解决重复代码的问题我们可以封装重复的代码到“函数”的功能模块中在需用使用该功能的地方我们只需要“调用”这个“函数”就可以了。
二、定义函数
在Python中可以使用def关键词来定义函数和变量一样每个函数都有自己的名字命名规则与变量的命名规则一致在函数后面的园括号中可以放置传递给函数的参数程序中函数的参数就相当于数学中提到的自变量而函数执行完成后我们可以通过return来返回一个值
三、函数的参数
函数是绝大多数编程语言中都支持的一个代码的构建块但是Python中的函数与其他语言中的函数还是有很多不太相同的地方其中一个显著的区别就是Python对函数参数的处理。在Python中函数的参数可以有默认值也支持使用可变参数所以Python并不需要像其他语言一样支持函数的重载因为我们在定义一个函数的时候可以让它有多种不同的使用方式下面是两个小例子。
from random import randint# roll dice
def roll_dice(n 2):total 0for _ in range(n):total randint(1,6)return total#sum of 3 num
def add(a 0, b 0, c 0):return a b c# 如果没有指定参数那么使用默认值摇两颗色子
print(roll_dice())
# 摇三颗色子
print(roll_dice(3))
print(add())
print(add(1))
print(add(1, 2))
print(add(1, 2, 3))
# 传递参数时可以不按照设定的顺序进行传递
print(add(c50, a100, b200))给上面两个函数的参数都设定了默认值意味着当调用函数时没有传入参数的值这时将使用参数的默认值所以在上面的代码我们可以用各种不同的方式去条用add函数这和其他很多语言中函数重载的效果一致。
优化上述add函数。假设我们对0个或者多个参数进行加法运算而具体由多少个参数是由调用者来决定的我们作为函数的设计者对这一点是一无所知的因此不确定参数个数时我们可以使用可变参数。
# * indicates this parameter is a variable paramber
def add(*args):total 0for _ in args:total _return totalprint(add())
print(add(1))
print(add(1, 2))
print(add(1, 2, 3))
print(add(1, 3, 5, 7, 9))四、用模块管理函数
同名函数问题由于python中没有函数重载概念为了避免后面定义的函数覆盖之前的函数所以我们要使用模块对函数进行管理例如下面的情况
def foo():print(hello world)def foo()print(goodbye world)foo()解决方式Python中每个文件代表了一个module在不同module中可以有同名的函数在使用函数时我们通过import导入指定module即可。
module1.py
def foo():print(hello, world!)module2.py
def foo():print(goodbye, world!)test.py
from module1 import foo# 输出hello, world!
foo()from module2 import foo# 输出goodbye, world!
foo()也可以按照如下所示的方式来区分到底要使用哪一个foo函数。
test.py
import module1 as m1
import module2 as m2m1.foo()
m2.foo()但是如果将代码写成了下面的样子那么程序中调用的是最后导入的那个foo因为后导入的foo覆盖了之前导入的foo。
test.py
from module1 import foo
from module2 import foo# 输出goodbye, world!
foo()我们在导入的module中除了定义的函数可能还有其它可执行代码当我们import时会执行这些代码当我们不需要执行这些代码时就需要将它们放入if条件
module3.py
def foo():passdef bar():pass# __name__是Python中一个隐含的变量它代表了模块的名字
# 只有被Python解释器直接执行的模块的名字才是__main__
if __name__ __main__:print(call foo())foo()print(call bar())bar()test.py
import module3# 导入module3时 不会执行模块中if条件成立时的代码 因为模块的名字是module3而不是__main__五、练习
一实现计算最大公约数和最小公倍数的函数
最大公约数 greatest common divisor最小公倍数 least common multiple
def gcd_lcm(a, b):# 计算最大公约数gcd abs(a) % abs(b)while gcd! 0:a, b b, gcdgcd abs(a) % abs(b)# 计算最小公倍数lcm abs(a) * abs(b) // gcdreturn gcd, lcm在上述代码中定义了一个名为 gcd_lcm 的函数它接受两个整数 a 和 b 作为参数。函数内部使用循环计算出两个数的最大公约数 gcd然后根据最大公约数计算出最小公倍数 lcm最后返回最大公约数和最小公倍数。你可以根据实际需求调用这个函数来计算最大公约数和最小公倍数。
二、实现判断一个数是不是回文数的函数
def is_palindrome(n):# 将数字转换为字符串str_n str(n)# 反转字符串reverse_str str_n[::-1]# 比较原字符串和反转后的字符串是否相等return str_n reverse_str在上述代码中定义了一个名为 is_palindrome 的函数它接受一个整数 n 作为参数。首先将整数转换为字符串然后通过切片操作 [::-1] 反转字符串最后比较原字符串和反转后的字符串是否相等如果相等则返回 True表示是回文数否则返回 False。你可以根据需要调用这个函数来判断一个数是否为回文数。
三、实现判断一个数是不是素数的函数
def is_prime(n):if n 1:return Falseif n 3:return Trueif n % 2 0 or n % 3 0:return Falsei 5while i * i n:if n % i 0 or n % (i 2) 0:return Falsei 6return True在上述代码中定义了一个名为 is_prime 的函数它接受一个整数 n 作为参数。首先判断 n 是否小于等于 1如果是则返回 False表示不是素数。接着判断 n 是否小于等于 3如果是则返回 True因为 2 和 3 都是素数。然后判断 n 是否能被 2 或 3 整除如果能则返回 False。接下来从 5 开始每次增加 6直到 i 的平方大于 n 为止。在循环中如果 n 能被 i 或 i2 整除则返回 False。如果循环结束后都没有返回 False则说明 n 是素数返回 True。
四、写一个程序判断输入的正整数是不是回文素数
def is_palindromic_prime(n):# 先判断是否为素数if not is_prime(n):return False# 再判断是否为回文数str_n str(n)reverse_str str_n[::-1]if str_n! reverse_str:return Falsereturn Truedef is_prime(n):if n 1:return Falseif n 3:return Trueif n % 2 0 or n % 3 0:return Falsei 5while i * i n:if n % i 0 or n % (i 2) 0:return Falsei 6return Truenum int(input(请输入一个正整数))
if is_palindromic_prime(num):print(f{num} 是回文素数。)
else:print(f{num} 不是回文素数。)这段代码首先定义了两个函数 is_prime 和 is_palindromic_prime。is_prime 函数用于判断一个数是否为素数is_palindromic_prime 函数用于判断一个数是否为回文素数。
然后程序通过 input 函数获取用户输入的正整数并将其存储在变量 num 中。最后调用 is_palindromic_prime 函数判断 num 是否为回文素数并输出相应的结果。