day31,Vim中经典例子python代码总结

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))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值