函数和模块的使用二

六、练习

1.实现计算求最大公约数和最小公倍数的函数
def gcd(x, y):
 (x, y) = (y, x) if x > y else (x, y)
 for factor in range(x, 0, -1):
    if x % factor == 0 and y % factor == 0:
        return factor

def lcm(x, y):
 return x * y // gcd(x, y)

给x,y判断大小,以小
(x, y) = (y, x) if x > y else (x, y),这个容易忘。

2.实现判断一个数是不是回文数的函数
def is_palindrome(num):
 temp = num
 total = 0
 while temp > 0:
    total = total * 10 + temp % 10
    temp //= 10
 return total == num

设n是一任意自然数。若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数。例如,若n=1234321,则称n为一回文数;但若n=1234567,则n不是回文数。

3.实现判断一个数是不是素数的函数
def is_prime(num):
 for factor in range(2, num):
   if num % factor == 0:
    return False
 return True if num != 1 else False
4.写一个程序判断输入的正整数是不是回文数
def is_palindrome(num):
 temp = num
 total = 0
 while temp > 0:
    total = total * 10 + temp % 10
    temp //= 10
 return total == num

def is_prime(num):
 for factor in range(2, num):
   if num % factor == 0:
    return False
 return True if num != 1 else False

if __name__ == '__main__':
 num = int(input('请输入正整数: '))
 if is_palindrome(num) and is_prime(num):
    print('%d是回文素数' % num)
 else:
     print('%d不是回文素数' % num)

解读 if __name__ == '__main__':

这段代码的主要作用主要是让该python文件既可以独立运行,也可以当做模块导入到其他文件。当导入到其他的脚本文件的时候,此时__name__的名字其实是导入模块的名字,不是'__main__', main代码里面的就不执行了。

七、变量作用域问题

def foo():
    b = 'hello'

    def bar():  # Python中可以在函数内部再定义函数
        c = True
        print(a)
        print(b)
        print(c)


    bar()
# print(c) # NameError: name 'c' is not defined

if __name__ == '__main__':
    a = 100
    # print(b) # NameError: name 'b' is not defined
    foo()

执行结果

在这里插入图片描述

a是一个全局变量,全局作用域。都可以访问。

b定义在函数中的局部变量,局部作用域。foo函数和bar函数可以访问。

c也是局部作用域,只有bar函数可以访问。

局部作用域、嵌套作用域、全局作用域、内置作用域

例子:

def foo():
 a = 200
 print(a) # 200
if __name__ == '__main__':
 a = 100
 foo()
 print(a) # 100

在这里插入图片描述

这时foo函数中的变量a的被重新定义的局部变量a

和全局作用域的a不是同一个

可以把foo函数的变量a改成全局变量

def foo():
 global a
 a = 200
 print(a) # 200

if __name__ == '__main__':
 a = 100
 foo()
 print(a) # 200

在这里插入图片描述

此时输出的a值都为200

规范书写:

def main():
 # Todo: Add your code here
 pass

if __name__ == '__main__':
 main()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值