几天前我用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'未定义“
答案 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)
,因此您甚至不需要其他任何方法。)