python重载四则运算符及输出格式设置

数学运算
Python 提供的基本数据类型 int、float 可以做整数和浮点的四则运算以及乘方等运算。

但是,四则运算不局限于int和float,还可以是有理数、矩阵等。

要表示有理数,可以用一个Rational类来表示:

class Rational(object):
    def __init__(self, p, q):
        self.p = p
        self.q = q
p、q 都是整数,表示有理数 p/q。

如果要让Rational进行+运算,需要正确实现__add__:

class Rational(object):
    def __init__(self, p, q):
        self.p = p
        self.q = q
    def __add__(self, r):
        return Rational(self.p * r.q + self.q * r.p, self.q * r.q)
    def __str__(self):
        return ‘%s/%s‘ % (self.p, self.q)
    __repr__ = __str__
现在可以试试有理数加法:

>>> r1 = Rational(1, 3)
>>> r2 = Rational(1, 2)
>>> print r1 + r2
5/6
任务
def gcd(a,b):
    if(b==0):
        return a
    return gcd(b,a%b)
class Rational(object):
    def __init__(self, p, q):
        self.p = p
        self.q = q

    def __add__(self, r):
        return Rational(self.p * r.q + self.q * r.p, self.q * r.q)

    def __sub__(self, r):
        return Rational(self.p * r.q - self.q * r.p, self.q * r.q)

    def __mul__(self, r):
        return Rational(self.p * r.p, self.q * r.q)

    def __div__(self, r):
        return Rational(self.p*r.q,self.q*r.p)

    def __str__(self):
        g=gcd(self.p,self.q)
        return ‘(%d/%d)‘ %(self.p/g,self.q/g)

    __repr__ = __str__

r1 = Rational(1, 2)
r2 = Rational(1, 4)
print r1 + r2
print r1 - r2
print r1 * r2
print r1 / r2

能够输出想要的结果。

时间: 2024-08-05 02:27:27

python重载四则运算符及输出格式设置的相关文章

Python中的运算符

如果工作中没有计算器,可以直接使用Python作为Calculator来使用.下面介绍Python中的运算符. + 加运算符,如果'+'两边都是数字,进行加法运算.如果两边都是字符串类型,进行连接操作.如果一边是数字,一边是字符串,则会报错. TypeError: unsupported operand type(s) for +: 'int' and 'str'. -  减运算符,进行减法运算. * 乘运算法,进行乘法运算. /  除运算法,进行除法运算.Python中的除法运算符解决了  1

Windows下python virtualenv使用,镜像源设置,批量安装,安装scipy,numpy

镜像源设置 在C:\Users\Administrator\下建立pip文件夹,然后在里面创建了一个pip.ini 内容为: [global]index-url = https://pypi.tuna.tsinghua.edu.cn/simple virtualenv安装 pip install virtualenv 好了,现在假如你需要进行数值方面的研究需要安装 python-numpy python-scipy python-matplotlib ipython ipython-notebo

C++运算符重载——重载特殊运算符

1.重载赋值运算符= 赋值运算符用于同类对象间的相互赋值.赋值运算符只能被重载为类的非静态成员函数,不能重载为友元函数和普通函数. 对于用户自定义的类而言,如果没有重载赋值运算符,那么C++编译器会为该类提供一个默认的重载赋值运算符成员函数. 默认赋值运算符的工作方式是按位对拷,将等到右边对象的非静态成员拷贝给等号左边的对象. 重载赋值运算符函数必须是public的,否则会编译错误,因为用户定义了重载赋值运算符函数,编译器就不会提供默认的. 在类中重载的赋值运算符函数不能被继承! 通常情况下编译

what's the python之基本运算符及字符串、列表、元祖、集合、字典的内置方法

计算机可以进行的运算有很多种,运算按种类可分为算数运算.比较运算.逻辑运算.赋值运算.成员运算.身份运算.字符串和列表的算数运算只能用+和*,字典没有顺序,所以不能进行算数运算和比较运算.比较运算中==比较的是值,is比较的是id.比较运算只能在同种类型下进行比较.字符串的比较是按照顺序依次进行比较.逻辑运算的顺序先后为要用括号来表示. 基本运算符如下: 算术运算 以下假设a=10,b=20 比较运算 以下假设a=10,b=20 赋值运算 逻辑运算  成员运算 身份运算 what's the 内

Python-10:Python语法基础-运算符与表达式

1.Python运算符简介 1)什么是运算符 在Python中经常需要对一个或多个数字进行操作,2+3中的+是运算符,"hello"*20中的*也是运算符 2)运算符有哪些 + - * / ** < > != // % & | ^ ~ >> << <= >= == not and or 3)运算符的使用方法 #encoding:utf-8 # +两个数字相加 a=7+8 print a #15 # +两个字符串相加 b="

C++ Primer 学习笔记_28_操作符重载与转换(3)--成员函数的重载、覆盖与隐藏、类型转换运算符、*运算符重载、-&gt;运算符重载

C++ Primer 学习笔记_28_操作符重载与转换(3)--成员函数的重载.覆盖与隐藏.类型转换运算符.*运算符重载.->运算符重载 一.成员函数的重载.覆盖与隐藏 对于类层次的同名成员函数来说,有三种关系:重载.覆盖和隐藏,理清3种关系,有助于写出高质量的代码. 1.成员函数的重载 重载的概念相对简单,只有在同一类定义中的同名成员函数才存在重载关系,主要特点时函数的参数类型和数目有所不同:但不能出现函数参数的个数和类型均相同,仅仅依靠返回值类型不同来区分的函数,这和普通函数的重载是完全一致

c++笔记--重载箭头运算符

箭头操作符(->)的通常用法是,使用一个类对象的指针来调用该指针所指对象的成员.左操作数为对象指针,右操作数为该对象的成员.定义重载箭头操作符之后看起来就有点特别,可以用类对象的指针来调用,也可以用类对象直接调用. 重载箭头操作符,首先重载箭头操作符必须定义为类成员函数. 箭头操作符可能看起来是二元操作符:接受一个对象和一个成员名,对对象解引用以获取成员.其实箭头操作符是一元操作符,没有显示形参(而且是类成员,唯一隐式形参是this).->的右操作数不是表达式,而是对应类成员的一个标识符,由编

C++重载加号运算符实现两个结构体的相加

#include<iostream> #include<string> using namespace std; struct S { int a, b; string str; S operator+(const S &others) { S s1; s1.a = this->a + others.a; s1.b = this->a + others.a; s1.str += this->str; s1.str += others.str; return

不使用四则运算符计算两个整数的和

这里笔者只写出关键代码: int add(int n,intm) {   if(m==0) returnn;      ①    int sum=n^m;           ②    int carry=(n&m)<<1;    ③    return add(sum,carry); ④} 在分析每步代码之前先看两个例子:不带进位的两数相加:0000 0010------20000 0100------4结果是:0000 0110------6带进位的两数相加:0000 0101--