1.例子:判断一个正整数是不是完美数
该数字所有数位(digits)的平方和,得到的新数再次求所有数位的平方和,如此重复进行,最终结果必为1。
2 8 → 2²+8²=68 → 6²+8²=100 → 1²+0²+0²=1
3 2 → 3²+2²=13 → 1²+3²=10 → 1²+0²=1
1 #!/usr/local/python37/bin/python3
2 """执行路径"""
3 def is_happy(num):
4 """判断一个正整数是不是完美数 """
5 temp = set()
6 while num != 1:
7 total = 0
8 while num > 0:
9 last = num % 10 #取到一个数的每一位
10 total += last **2 #每一位的平方和
11 num //= 10
12 if total in temp:
13 return False
14 temp.add(total)
15 num = total
16 def main():
17 """主程序(函数入口)"""
18 for num in range(1, 101):#100以内的快乐数字
19 print(f'{num}:{is_happy(num)}')
20 if __name__ == '__main__':
21 main()
2.例子:定义类,员工工资结算系统
1 #!/usr/local/python37/bin/python3:
2 """工资结算系统 """
3 from abc import ABCMeta,abstractmethod
4 class Employee(object, metaclass=ABCMeta): #定义一个抽象员工类
5
6 def __init__(self, name):#属性名字
7 self.name = name
8
9 @abstractmethod #抽象方法(不能产生子类)
10 def get_salary(self): #得到薪水
11 pass
12
13 class Manager(Employee): #定义管理员类
14 """部门经理"""
15 def get_salary(self):
16 return 12000
17
18 class Programmer(Employee):y
19 """程序员"""
20 def __init__(self,name):
21 super().__init__(name)#员工的子类程序员
22 self.working_hour = 0
23
24 def get_salary(self):
25 return 200 * self.working_hour
26
27 class Salesman(Employee):
28 """销售员"""
29 def __init__(self,name):
30 super().__init__(name)
31 self.sales = 0
32 def get_salary(self):
33 return 1800 + self.sales * 0.05
34
35 def main():
36 emps=[
37 Manager('曹操'),Programmer('荀彧'),Manager('刘备'),
38 Salesman('马超'),Programmer('诸葛亮'),Programmer('周瑜')
39 ]
40 for emp in emps:
41 if isinstance(emp,Programmer):
42 emp.working_hour = int(input(f'请输入{emp.name}本月工作时间:'))
43 elif isinstance(emp,salesman):
44 emp.sales = float(input(f'请输入{emp.name}本月销售额:'))
45 print(f'{emp.name}本月工资为:{emp.get_salary}元')
46
47 if __name__ == '__main__':
48 main()
3.例子:五人分鱼
题目:5个人(ABCDE)晚上捕鱼
A - 把鱼分成5份扔掉多的1条拿走自己那份
B,C,D,E一样的成5份扔掉多的1条拿走自己那份
求最少捕了多少条鱼?
假设捕了x条鱼
那么(x -1) % 5 == 0
剩下的鱼为(x-1) // 5*4 =
1 #!/usr/bin/python3
2 def main():
3 fish = 1
4 while True:
5 total, enough = fish, True
6 for _ in range(5):
7 if (total - 1) % 5 == 0:
8 total = (total - 1) // 5 * 4
9 else:
10 enough = False
11 break
12 if enough:
13 print(fish)
14 break
15 fish += 1
16 if __name__ == '__main__':
17 main()
4.例子 阶乘和斐波拉切数列
1
2 #!/usr/bin/python3
3 def fact(num):
4 """阶乘算法"""
5 if num in (0, 1):
6 return 1
7 else:
8 return num * fact(num-1)
9
10 def fibo(num, temp = {}):
11 """斐波拉切数列"""
12 if num in (1, 2):
13 return 1
14 if num not in temp:
15 temp[num] = fibo(num -1) + fibo(num - 2)
16 return temp[num]
17
18 if __name__=='__main__':
19 print(fibo(5))
20 print(fact(5))