Python常用练习小例子
1、输出九九乘法表
使用for循环源码如下:
# 九九乘法表
for i in range(1, 10):
for j in range(1, i+1):
print('{}x{}={}\t'.format(i, j, i*j), end='')
print() # 换行,相当于print(end='\n')
其中,rint('{}x{}={}\t'.format(i, j, i*j), end='') 可改为 print ("%dx%d=%d\t" % (i, j, i*j), end='')
运行效果:
关于Python的输入函数input()和输出函数print() 可参见https://blog.csdn.net/cnds123/article/details/118638607
也可以使用while 循环实现,源码如下:
i = 1
while i <= 9:
j = 1
while j <= i:
print("%dx%d=%d\t"%(i,j,i*j),end = '')
j += 1
print()
i += 1
2、判断用户输入的年份是否为闰年
不是整百的年份只要被4整除的就是闰年,整百的年份必须得被400整除才是闰年。
源码如下:
year = int(input("输入一个年份: "))
if (year % 4) == 0:
if (year % 100) == 0:
if (year % 400) == 0:
print("{0} 是闰年".format(year)) # 整百年能被400整除的是闰年
else:
print("{0} 不是闰年".format(year))
else:
print("{0} 是闰年".format(year)) # 非整百年能被4整除的为闰年
else:
print("{0} 不是闰年".format(year))
3、斐波那契数列
斐波那契数列(Fibonacci sequence),又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……。
在数学上,费波那契数列是以递归的方法来定义:
F0 = 0 (n=0)
F1 = 1 (n=1)
Fn = F[n-1]+ F[n-2](n=>2) 即从第三项开始,每一项都等于前两项之和。
法一、采用递归
# 获取用户输入数据
nterms = int(input("需要几项?"))
#递归
def fib(n):
if n == 1:
return [1]
if n == 2:
return [1, 1]
fibs = [1, 1]
for i in range(2, n):
fibs.append(fibs[-1] + fibs[-2])
return fibs
# 判断输入的值是否合法
if nterms <= 0:
print("请输入一个正整数。")
else:
print (fib(nterms))
法二、不用递归
# 获取用户输入数据
nterms = int(input("需要几项?"))
#不用递归
#求第n项(n>2)
def fn(n):
a,b = 1,1
for i in range(n-1):
a,b = b,a+b
return a
def fib(n):
if n == 1:
return [1]
if n == 2:
return [1, 1]
fibs = [1, 1]
for i in range(2, n):
fibs.append(fn(nterms))
return fibs
# 判断输入的值是否合法
if nterms <= 0:
print("请输入一个正整数。")
else:
print (fib(nterms))
4、将一个正整数分解质因数
对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
程序源代码如下:
# 获取用户输入数据
N = int(input("请输入一个正整数:"))
def reduceNum(n):
print ('{} = '.format(n), end=" ")
if not isinstance(n, int) or n <= 0 :
print ('请输入一个正确的数字 !')
exit(0)
elif n in [1] :
print ('{}'.format(n))
while n not in [1] : # 循环保证递归
for index in range(2, n + 1) :
if n % index == 0:
n //= index # n 等于 n//index
if n == 1:
print (index )
else : # index 一定是素数
print ('{} *'.format(index), end=" ")
break
reduceNum(N)
5、判断一个数是奇数还是偶数
#给定一个数判断是奇数或偶数
while True:
try:
# 判断输入是否为整数
num = int(input('输入一个整数:'))
# 不是纯数字需要重新输入
except ValueError:
print("输入的不是整数!")
continue
if num % 2 == 0:
print('偶数')
else:
print('奇数')
break
其中try 语句用于异常(Exceptions)处理。
6、求两个整数的最大公约数和最小公倍数
最大公约数:两个或多个整数共有约数中最大的一个。
最小公倍数:两个或两个以上的自然数中,它们有相同的倍数,当中最小的倍数就 是它们的最小公倍数。
# 定义求两个数的最大公约数函数
def hcf(x, y):
# 获取最小值
if x > y:
smaller = y
else:
smaller = x
for i in range(1,smaller + 1):
if((x % i == 0) and (y % i == 0)):
hcf = i
return hcf
# 定义求两个数的最小公倍数函数
def lcm(x, y):
# 获取最大的数
if x > y:
greater = x
else:
greater = y
while(True):
if((greater % x == 0) and (greater % y == 0)):
lcm = greater
break
greater += 1
return lcm
# 用户输入两个数字
num1 = int(input("输入第一个数字: "))
num2 = int(input("输入第二个数字: "))
print( num1,"和", num2,"的最大公约数为", hcf(num1, num2))
print( num1,"和", num2,"的最小公倍数为", lcm(num1, num2))
还可以这样:
#求两个整数最大公约数的函数
def gcd(a, b):
if b == 0:
return a
else:
return gcd(b, a % b)
#求两个整数最小公倍数的函数
def lcm(a, b):
return a * b // gcd(a, b) #其中//表示整除运算符
# 用户输入两个数字
num1 = int(input("输入第一个数字: "))
num2 = int(input("输入第二个数字: "))
print( num1,"和", num2,"的最大公约数为", gcd(num1, num2))
print( num1,"和", num2,"的最小公倍数为", lcm(num1, num2))
7、用1、2、3、4个数字能组成多少个互异的三位数
用1、2、3、4个数字能组成多少个互不相同且无重复数字的三位数?并具体列出来。
源码如下:
n = 0
for i in range(1, 5):
for j in range(1, 5):
for k in range(1, 5):
if(i != k) and (i != j) and (j != k):
print(i, j, k) #输出满足条件的排列
n += 1
print('共有%s种' % n)