# 复杂代码:
m = int(input('m ='))
n = int(input('n ='))
fm = 1for num in range(1,m+1):
fm *= num
fn = 1for num in range(1,n+1):
fn *= num
fmn = 1for num in range(1,m - n + 1):
fmn *= num
print(fm // fn // fmn)
# 简单代码# y = f(x) f 是函数名 x 是自变量 y是因变量# 定义求阶乘的函数 - 将求阶乘的功能抽取出来放到函数中deff(x):# 定义函数
y = 1for z in range(1,x + 1):
y *= z
return y
m = int(input('m ='))
n = int(input('n ='))
# 当需要计算阶乘的时候不用在写循环而是直接调用已经定好的函数
print(f(m) // f(n) // f(m-n))
小结:这样既简化了代码,思路清晰了一点,更重要的是简洁明了,不拖沓~看起来也好看~
例2:判断一个数是不是素数,写成一个函数
# 定义判断素数的函数defis_prime(num):from math import sqrt
for factor in range(2, int(sqrt(num) + 1)):
if num % factor == 0:
returnFalsereturnTrue# 在调用函数的代码中时,在pycharm中可以ctrl加鼠标点击即可查看被调用的函数
例3.1:最大公约数
defgcd(x,y):
(x, y) = (y, x) if x > y else (x, y)
for factor in range(x, 0, -1): # 从大到小的循环,步长为1if x % factor == 0and y % factor ==0:
return factor
例3.2:最小公倍数
deflcm(x,y):return x * y // gcd(x, y)
例4.判断是否为回文数,写出定义函数。
# 我写的如下:defis_palindromic(num):
a = str(num)
b = len(a)
for i in range(int(b/2)):
if a[i] == a[b-i-1]:
returnTrue
# 老师写的如下:defis_palindrome(num):"""
判断一个数是不是回文数
:param num:一个非负整数
:return:是回文数返回True否则返回False
"""
temp = num # 12321
total = 0while temp > 0:
total = total * 10 +temp % 10
temp //= 10return num == total
了解到以下知识点:
and 和 or 运算符都是带短路功能的运算符
如果and左边的表达式是False那么右边的表达式被短路(不执行)
所以左右两边的表达式放置的顺序可能回对执行效率产生明显的影响
例5.判断是否为回文素数
"""这里就是调用了上文提到的两个函数:
一是:判断是否为素数的函数【例2】
二是:判断是否为回文数的函数【例4】
"""
num = int(input('请输入一个非负整数:'))
if is_palindrome(num) and is_prime(num):
print('%d是回文素数'%num)
else:
print('%d不是回文素数'%num)