任务描述

在 Python 中,如果用实例去调用方法,这种限制就被称为 Python 中的绑定(binging)。没有创建实例时,方法就是未绑定的。本关的任务就是让学习者理解什么是绑定,并学会如何调用方法。

相关知识

调用绑定方法
在定义方法时,self总是作为第一个参数传递的。self代表实例本身,self.变量代表调用此实例的变量,self.方法代表调用实例的方法。因为声明方法时已经传入self,所以在调用时self就不用明确传入了,此时实例是隐含的。调用绑定方法的代码如下:

class bindExample:
def bindMethod(self):
print(“绑定方法调用实例”)
be = bindExample()
be.bindMethod()
调用非绑定方法
当调用非绑定方法的时候,因为没有创建实例,所以需要用类去调用方法。在调用的时候需要显式地传入一个实例参数。例如:

class bindExample:
def bindMethod(self):
print(“非绑定方法调用实例”)
be = bindExample()
bindExample.bindMethod(be)
如果您想了解更多绑定与方法调用的相关知识,请参考:[美] Wesley J.Chun 著《 Python 核心编程》第十三章。

编程要求

本关的测试文件给出了一个类fractionSum,此类的作用是当输入一个数n,如果n为偶数,求1/2+1/4+…+1/n的和,如果输入n为奇数,求1/1+1/3+…+1/n的和。

在fractionSum中,定义了方法peven(self,n)用来求当n为偶数时的结果,定义了podd(self,n)用来求当n为奇数时的结果,定义了dcall(self,fp,n)方法来调用peven与podd两个方法,fp为方法名,最后返回计算结果。

本关的编程任务是补全fractionSum.py文件中的创建实例与调用方法部分,具体要求如下:

填入创建fractionSum的实例fs的代码;
填入调用fractionSumtest类中dcall方法的代码,计算当n为偶数时计算的和;
填入调用fractionSumtest类中dcall方法的代码,计算当n为奇数时计算的和。
测试说明
本关涉及的代码文件fractonSum.py的代码框架如下:

import fractionSumtest
请在下面填入创建fractionSum的实例fs的代码
########## Begin ##########
########## End ##########
n = int(input())
if n % 2 == 0:
# 请在下面填入调用fractionSumtest类中dcall方法的代码,计算当n为偶数时计算的和
########## Begin ##########
########## End ##########
else:
# 请在下面填入调用fractionSumtest类中dcall方法的代码,计算当n为奇数时计算的和
########## Begin ##########
########## End ##########
print(sum)

测试说明

本文的测试文件是fractionSumtest.py,具体测试过程如下:

平台自动编译生成fractionSumtest.exe;
平台运行fractionSumtest.exe,并以标准输入方式提供测试输入;
平台获取fractionSumtest.exe输出,并将其输出与预期输出对比。如果一致则测试通过,否则测试失败。
以下是平台对src/step3/fractionSumtest.py的样例测试集:
预期输入:

5
预期输出:

1.5333333333333332
预期输入:

8
预期输出:

1.0416666666666665

import fractionSumtest
# 请在下面填入创建fractionSum的实例fs的代码
########## Begin ##########
class fractionSum(object):
    def __init__(self):
        self.sum = 0

    def peven(self, n):
        while(n != 0):
            self.sum += 1 / n
            n -= 2

    def podd(self, n):
        while(n >= 1):
            self.sum += 1 / n
            n -= 2

    def dcall(self, fp, n):
        if(fp == "peven"):
            self.peven(n)
            return self.sum
        else:
            self.podd(n)
            return self.sum
fs = fractionSum()
########## End ##########
n = int(input())
if n % 2 == 0:
    # 请在下面填入调用fractionSumtest类中dcall方法的代码,计算当n为偶数时计算的和
    ########## Begin ##########
    sum = fs.dcall("peven", n)
    ########## End ##########
else:
    # 请在下面填入调用fractionSumtest类中dcall方法的代码,计算当n为奇数时计算的和
    ########## Begin ##########
    sum = fs.dcall("podd", n)
    ########## End ##########
print(sum)