今天写了力扣的第九题,看到了大佬用切片的形式一行解决了问题;于是学到了切片的新方法
class Solution:
def isPalindrome(self, x: int) -> bool:
if str(x) == str(x)[::-1]:
return True
else:
return False
P.S.:return是我自己加的,为了更明显让我自己看得懂
第一回:方法调用失败
我放python里存着是为了我自己以后能直接回忆,不过我至少要能在本地直接运行它,所以肯定需要调用,但这个时候出现了一个问题
我是这样调用的
a = Solution.isPalindrome(121)
问了GPT,它说因为需要先创建类的实例,然后才可以调用方法。
后来我稍微理解了一下:
有一个猫猫训练营(Solution),它可以实现训练猫猫学习技能的功能,比如奇怪的猫叫(isPalindrome),猫叫有各种形式(x)比如你好喵(121)、拜拜喵(686)、不理解喵(234)
训练营里有许多猫,比如煎饼(j)、豆浆(d)、卤蛋(l),它们都学习了奇怪的猫叫的技能,只需要输入的参数是回文数就能正确喵叫,比如你好喵(121)、拜拜喵(686),否则就会不理解喵(234)
j = Solution()
d = Solution()
l = Solution()
a1 = j.isPalindrome(121)
a2 = d.isPalindrome(686)
a3 = l.isPalindrome(234)
这个时候,你捧着一只猫,叫包子(b),看见猫猫训练营的几个猫猫都会猫叫,发现它们输入的参数是回文数就可以直接猫叫,于是你学着他们调用,直接对包子说:“包子(b)!来句猫猫训练营(Solution)的猫叫(isPalindrome)你好喵(121)”,但此时你的猫猫并不理解,失败了;为什么?因为它还不是猫猫训练营(Solution)中的一员;这个时候你意识到了,于是将你的猫猫登记了,成为了其中的一员b = Solution(),并且正确调用了,得到了一只会奇怪猫叫的包子(odd_baozi)
b = Solution()
odd_baozi = b.isPalindrome(121)
虽然你不知道发生了什么,不过至少包子它会猫叫了,但你总感觉这不是你的包子,你总感觉是包子的复制体,但它们又一模一样,只不过是一只奇怪的包子,会不会有飞翔的包子?或者是遁地的包子..?
**其中GPT也提供了静态方法@staticmethod,这样就不需要创建实例,不过我还没用过,没有理解,但这里做一个记录,至少让我知道还有个东西没学。。
第二回:一次判断多个值
然后我思考如何实现一次输入多个值,然后输出多个结果?
于是我想到通过列表,然后通过for循环来实现
class Solution:
def isPalindrome(self, x: int) -> bool:
if str(x) == str(x)[::-1]:
return True
else:
return False
a = Solution()
a1 = a.isPalindrome(121)
print(a1)
numbers = [121,412,5,65434456,1234321,621,4142]
for i in numbers:
result = a.isPalindrome(i)
print(result)
后来我意识到,我是不是可以把这个for循环弄成一个方法,然后直接调用方法不就行了吗,这样子列表我还能自己输入呢,于是
class Solution:
def isPalindrome(self, x: int) -> bool:
if str(x) == str(x)[::-1]:
return True
else:
return False
def check_alot_numbers(self, numbers)
self.numbers = numbers
for i in numbers:
result = a.isPalindrome(i)
print(result)
a = Solution()
a1 = a.isPalindrome(121)
print(a1)
list_number = [121,412,5,65434456,1234321,621,4142]
a2 = a.check_alot_numbers(list_number)
*注意:这里result = a.isPalindrome(i)有问题,应该是result = self.isPalindrome(i),我当时是直接复制上去的所以没有注意,但因为我创建了个a的实例而且没有其他的方法互相调用所以没有发现问题;
并且我的def check_alot_numbers(self, numbers)漏了一个引号(:)
第三回:打印模块
后来我发现如果调用isPalindrome总是要自己写print很麻烦,我希望和check_alot_numbers可以自动打印,可这样子我突然又想到我可以直接写一个方法专门用来打印,然后isPalindrome与check_alot_numbers直接调用这个方法就可以自己打印了
*这里本来想着用slice()切片来判断条件来着,后来发现直接判断对错就行了
class Solution:
def isPalindrome(self, x: int) -> bool:
if str(x) == str(x)[::-1]:
return True
else:
return False
def check_alot_numbers(self, numbers):
for i in numbers:
result = self.isPalindrome(i)
self.print_numbers(i,result)
def print_numbers(self, x, result):
if result:
print(f'{x}是回文数')
else:
print(f'{x}不是回文数')
a = Solution()
a1 = a.isPalindrome(121)
print(a1)
list_number = [121,412,5,65434456,1234321,621,4142]
a2 = a.check_alot_numbers(list_number)
D:\Python\python.exe D:\pycharm\pythonProject\草稿\力扣题\9回文数.py
True
121是回文数
412不是回文数
5是回文数
65434456不是回文数
1234321是回文数
621不是回文数
4142不是回文数
进程已结束,退出代码0
通过result我发现不同的方法的参数能相互调用
其实就只实现了check_alot_numbers的打印,我的想法是调用isPalindrome方法也能打印的,但是不要动这个方法的代码。好像GPT说通过装饰器可以实现,然后我没看懂,就没弄了。。
总结
学到了切片,方法调用,for循环;静态方法和装饰器还没学,功能也没实现,GG。