小学期Python面向对象实践-2 # Python # Cilay

· 面向对象编程之类运算操作小练习

描述

这是一个关于"面向对象编程之类运算操作"的小练习,覆盖面向对象编程中类的运算等语法的基本操作,包含两部分内容:跟随练习 和 小测验。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

在"跟随练习"环节,请使用IDLE编辑器的文件模式,逐块输入以下语句,观察并比较输出结果。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

在"小测验"环节,请在本题目对应的"提交代码"页面按要求输入代码,"保存并提交评判"后查看结果。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

跟随练习

(一)类的比较运算操作,按顺序逐块输入以下语句(19行):‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

class FirstClass:
    def __init__(self, seq, pos):
        self.seq = seq
        self.pos = pos

    def __lt__(self, other):
        return self.seq < other.seq

    def __le__(self, other):
        return self.seq <= other.seq
    
    def __eq__(self, other):
        return self.seq == other.seq
    
    def __ne__(self, other):
        return self.seq != other.seq
    
    def __gt__(self, other):
        return self.seq > other.seq
    
    def __ge__(self, other):
        return self.seq >= other.seq
       
d1 = FirstClass(10, "window")
d2 = FirstClass(8, "asile")
print(d1>d2, d1>=d2, d1==d2, d1!=d2, d1<d2, d1<=d2)

运行后结果如下:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

>>>
True True False True False False

(二)类的数值运算操作,按顺序逐块输入以下语句(21行):‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

class FirstClass:
    def __init__(self, seq, pos):
        self.seq = seq
        self.pos = pos
        
    def __add__(self, other):
        return self.seq + other.seq

    def __sub__(self, other):
        return abs(self.seq - other.seq)

    def __mul__(self, other):
        return self.seq * other.seq

    def __truediv__(self, other):
        return "非法操作"

    def __floordiv__(self, other):
        return self.seq // other.seq

    def __mod__(self, other):
        return self.seq % other.seq

    def __divmod__(self, other):
        return divmod(self.seq, other.seq)


d1 = FirstClass(10, "window")
d2 = FirstClass(8, "asile")
print(d1+d2, d1-d2, d1*d2, d1/d2, d1//d2, d1%d2, divmod(d1,d2))

运行后结果如下:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

>>>
18 2 80 非法操作 1 2 (1, 2)

(三)类的一元算术运算操作,按顺序逐块输入以下语句(15行):‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

class FirstClass:
    N = 20
    def __init__(self, seq, pos):
        self.seq = seq
        self.pos = pos

    def __neg__(self):
        return FirstClass.N - self.seq

    def __pos__(self):
        return self.seq
    
    def __abs__(self):
        return abs(self.seq - FirstClass.N//2)
        
    def __invert__(self):
        return self.seq + self.__abs__()


d1 = FirstClass(8, "window")
print(d1, -d1, +d1, abs(d1), ~d1)

运行后结果如下:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

>>>
<__main__.FirstClass object at 0x05E68DD0> 12 8 2 10

(四)类的二元算术运算操作,按顺序逐块输入以下语句(26行):‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

class FirstClass:
    def __init__(self, seq, pos):
        self.seq = seq
        self.pos = pos

    def __pow__(self, other):
        return self.seq ** other

    def __shift(self):
        return "asile" if self.pos == "window" else "window"

    def __lshift__(self, other):
        for _ in range(other):
            self.pos = self.__shift()
        return self.pos
    
    def __rshift__(self, other):
        for _ in range(other):
            self.pos = self.__shift()
        return self.pos
        
    def __and__(self, other):
        return self.seq & other.seq
        
    def __xor__(self, other):
        return self.seq ^ other.seq
    
    def __or__(self, other):
        return self.seq | other.seq

d1 = FirstClass(10, "window")
d2 = FirstClass(8, "asile")
print(pow(d1, 2), d1 << 3, d1 >> 5)
print(d1 & d2, d1 ^ d2, d1 | d2)

运行后结果如下:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

>>>
100 asile window
8 2 10

(五)类的成员运算操作,按顺序逐块输入以下语句(26行):‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

class FirstClass:
    def __init__(self, seq, pos):
        self.seq = seq
        self.pos = pos

    def __contains__(self, item):
        return True if self.seq == item else False
    
    def __getitem__(self, key):
        if key == 0:
            return self.seq
        elif key == 1:
            return self.pos
        else:
            return "错误键值"
        
    def __setitem__(self, key, v):
        if key == 0:
            self.seq = v
        elif key == 1:
            self.pos = v
        else:
            pass

d1 = FirstClass(10, "window")
print(10 in d1, 5 in d1)
print(d1[0], d1[1])
d1[0] = 8
d1[1] = "asile"
print(d1[0], d1[1])

运行后结果如下:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

>>>
True False
10 window
8 asile

 ‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

小测验

请将如下代码粘贴至"提交代码"页面,"保存并提交评判"后查看结果。注意,此时代码不是交互模式,而是文件模式。 ‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

class FirstClass:
    def __init__(self, seq, pos):
        self.seq = seq
        self.pos = pos

    def __str__(self):
        return "座位号:" + str(self.seq) + "; 类型:" + self.pos
    
d1 = FirstClass(10, "window")
print(str(d1))

</>提交代码

class FirstClass:
    def __init__(self, seq, pos):
        self.seq = seq
        self.pos = pos

    def __str__(self):
        return "座位号:" + str(self.seq) + "; 类型:" + self.pos
    
d1 = FirstClass(10, "window")
print(str(d1))

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值