python面向过程、面向对象

1、前言

  考虑这样一个问题,500个小孩围城一,从第一个小孩开始计数,逢三出圈(逢三:代表能被三整除,如6、27、468),使用python面向过程和面向对象进行编程解答。

2、面向过程 OPP

# 定义500个孩子
cycle = list(range(1, 501))
step = 1
while len(cycle) > 1:
	dels = []
	for kid in cycle:
		if step % 3 == 0:
			dels.append(kid)
		step +=1
	cycle = [i for i in cycle if i not in dels]
	
print(cycle)		

3、面向对象 OOP

在这里插入图片描述
在这里插入图片描述

class Kid:
    def __init__(self, gid):
        self.gid = gid
        self.left = None
        self.right = None

class Cycle:
    def __init__(self, n):
        self.head = None
        self.tail = None
        for i in range(1, n + 1):
            self.add(Kid(i))


    def add(self, kid): 
        """ 向圈中添加一个小孩 """
        if self.head is None and self.tail is None:
            """ 如果圈中还没有小孩,则将第一个小孩作为头和尾 """
            self.head = kid
            self.tail = kid
            kid.left = kid
            kid.right = kid
        else:
            """ 如果圈中已经有小孩,则将新小孩添加到尾部的右边 """
            kid.left = self.head
            kid.right = self.tail
            self.head.right = kid
            self.tail.left = kid
            self.tail = kid
    
    def remove(self, kid):
        """ 从圈中移除一个小孩 """
        if kid is self.head:
            """ 如果移除的是头,则将下一个小孩作为头 """
            self.head = kid.left
        if kid is self.tail:
            """ 如果移除的是尾,则将上一个小孩作为尾 """
            self.tail = kid.right
        
        """ 将移除的小孩的左右小孩连接起来 """
        kid.left.right = kid.right
        kid.right.left = kid.left
        kid.left = None
        kid.right = None

cycle = Cycle(500)
cur = cycle.head
step = 1
while cycle.head is not cycle.tail:
    cur = cur.left
    if step % 3 == 0:
        cycle.remove(cur.right)
    step += 1

print(cycle.head.gid)

4、参考

Python一个例子理解面向对象和面向过程的差别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值