重写预编写的代码以实现类。 (蟒蛇)

时间:2017-12-08 12:56:05

标签: python python-3.x

几天前我用Python编写了这篇文章,以获得Python语法的要点。虽然效率可能不高,但它可以按照我的意图运作。

def LongerString():
    if len(String1) == len(String2):
        return len(String1)
    elif len(String1) > len(String2):
        return len(String1)
    elif len(String1) < len(String2):
        return len(String2)

def ShorterString():
    if len(String1) == len(String2):
        return len(String1)
    elif not len(String1) > len(String2):
        return len(String1)
    elif not len(String1) < len(String2):
        return len(String2)


#String1 and 2 from userinput

String1 = input('Input String1\n')
String2 = input('Input String2\n')

#After finishing comparing, evaluates in %

score = 0
for i in range(ShorterString()):
    if String1[i] == String2[i]:
        score += 1
print(score, "/", LongerString(), "Match", float(score / LongerString()) * 100, "%")

随着我的进步,决定在单个类下重写这段代码 更好地理解如何使用类。但看起来我错过了一些东西。以下是我的小尝试。

class CompareString:

    def LongerString():
        if len(String1) == len(String2):
            return len(String1)
        elif len(String1) > len(String2):
            return len(String1)
        elif len(String1) < len(String2):
            return len(String2)

    def ShorterString():
        if len(String1) == len(String2):
            return len(String1)
        elif not len(String1) > len(String2):
            return len(String1)
        elif not len(String1) < len(String2):
            return len(String2)

    def Result():
        for i in range(ShorterString()):
            if String1[i] == String2[i]:
                score += 1
        print(score, "/", LongerString(), "Match", float(score / LongerString()) * 100, "%")

String1 = input('Input String1\n')
String2 = input('Input String2\n')
CompareString.Result()

当尝试运行后面的代码时,我收到错误消息“第20行,在结果中     对于范围内的i(ShorterString()): NameError:名称'ShorterString'未定义“

1 个答案:

答案 0 :(得分:1)

对于直接问题,您需要通过self调用您的方法 - 即self.LongerString() - 他们需要接受self作为第一个参数。

但这并不是你如何使用课程。你应该编写一个__init__方法,它接受两个字符串并将它们存储为实例属性,然后引用它们。

(另请注意,您应该使用PEP8样式作为变量名。)

class CompareString:

    def __init__(self, string1, string2):
        self.string1 = string1
        self.string2 = string2

    def longer_string(self):
        if len(self.string1) == len(self.string2):
            ...

    def result(self):
         ... call self.longer_string() etc ...

compare = CompareString(string1, string2)
print compare.result()

(另请注意,您的longer_string方法可能只是return max(len(self.string1), len(self.string2)),而您的shorter_string方法也是如此。)

(另请注意,您的result方法不应迭代范围,而应超过zip(self.string1, self.string2),因此您甚至不需要其他任何方法。)