前言
经过几天的学习,我觉得有必要在这里带大家做一些练习来巩固之前所学的知识。前几天的学习足够让我们来构造简单的编程逻辑,我们本章内容将通过一些经典例题,来训练大家的编程思维逻辑,养成良好的编程思想。
一、练习:求解《百钱百鸡》问题
说明:百钱百鸡是我国古代数学家张丘建在《算经》一书中提出的数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?翻译成现代文是:公鸡5元一只,母鸡3元一只,小鸡1元三只,用100块钱买一百只鸡,问公鸡、母鸡、小鸡各有多少只?
# 假设公鸡x只,母鸡y只,则可以得出如下公式
for x in range(0, 20):
for y in range(0, 33):
z = 100 - x - y
if 5 * x + 3 * y + z / 3 == 100:
print('公鸡: %d只, 母鸡: %d只, 小鸡: %d只' % (x, y, z))
上面使用的方法叫做穷举法,这种方法通过一项一项的列举备选解决方案中所有可能的候选项并检查每个候选项是否符合问题的描述,最终得到问题的解。这种方法看起来比较笨拙,但对于运算能力非常强大的计算机来说,通常都是一个可行的甚至是不错的选择,也是编程过程中常用的方法之一,只要问题的解存在,这种方法一定能够找到它。
二、练习:寻找水仙花数问题
说明:水仙花数也被称为超完全数字不变数、自恋数、自幂数、阿姆斯特朗数,它是一个3位数,该数字每个位上数字的立方之和正好等于它本身,例如: 1 3 + 5 3 + 3 3 = 153 1^3 + 5^3+ 3^3=153 13+53+33=153。
# 方法一:
for bai in range(1,10): #百位
for shi in range(0,10): #十位
for ge in range(0,10): #个位
i=bai*100+shi*10+ge
if i==bai**3+shi**3+ge**3:
print(i)
#方法二:将数字先转化为字符串,利用字符串索引找到百、十、个位的数字值
for i in range(100,1000):
s=str(i) #将数字转化为字符串
d=int(s[0]) #百位
e=int(s[1]) #十位
f=int(s[2]) #个位
if i==d**3+e**3+f**3:
print(i)
#方法三:
for i in range(100,1000):
#// 使用取模,分别取出百位数、10位数、个位数
#/// k = i // 10 % 10, 需要注意运算符号和运算顺序
a=i // 100 #整除获得百位数
b=i //10 % 10 # 或者b = (i % 100) // 10
c=i % 10 #个位数
if i == a ** 3 + b ** 3 + c ** 3:
print(i)
三、练习:找出10000以内的完美数
说明:完美数又称为完全数或完备数,它的所有的真因子(即除了自身以外的因子)的和(即因子函数)恰好等于它本身。例如:6( 6 = 1 + 2 + 3 6=1+2+3 6=1+2+3)和28( 28 = 1 + 2 + 4 + 7 + 14 28=1+2+4+7+14 28=1+2+4+7+14)就是完美数。完美数有很多神奇的特性,有兴趣的可以自行了解。
# 引入数学模块
import math
for num in range(1, 10000):
result = 0
for factor in range(1, int(math.sqrt(num)) + 1):
if num % factor == 0:
result += factor
if factor > 1 and num // factor != factor:
result += num // factor
if result == num:
print(num)
四、练习:判断输入的正整数是不是回文数
说明:回文数是指将一个正整数从左往右排列和从右往左排列值一样的数
num = int(input('请输入一个正整数: '))
temp = num
num2 = 0
while temp > 0:
num2 *= 10
num2 += temp % 10
temp //= 10
if num == num2:
print('%d是回文数' % num)
else:
print('%d不是回文数' % num)
结尾
学习是一个漫长的过程,也是一个枯燥的过程,如果能够坚持下来,一定能学好python,并可以把它熟练的运用在生活和工作中去,提高自身效率。