qiuyouzhi 发表于 2020-4-10 11:38:31

Python 重构字符串的内置方法

本帖最后由 qiuyouzhi 于 2020-4-10 12:06 编辑

Python 重构字符串的内置方法

最近闲得没事,突然想起重构字符串的方法了。。

差不多做出了十多个吧,还会继续更新

有一些是我真的没有好思路的,便借鉴了鱼油和网上的思路。

也有一些是功能不完备的(strip),这里放上源代码(顺便做个备份):

class MyStr(str):
    def __init__(self,str1):
      self.str1 = str1
      
    def Isdigit(self):
      for each in self.str1:
            try:
                int(each)
            except:
                return False
      return True

    def Isalpha(self):
      temp = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM"
      for each in self.str1:
            if each not in temp:return False
      return True

    def isspace(self):
      for each in self.str1:
            if self.str1 != ' ':
                return False
      return True

    def Isalnum(self):
      temp = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM"
      temp2 = "1234567890"
      for each in self.str1:
            if not (each not in temp or each not in temp2):
                return False
      return True

    def Islower(self):
      for each in self.str1:
            if ord(each) < 97 or ord(each) > 122:
                return False
      return True

    def Istitle(self):
      if ord(self.str1) < 65 or ord(self.str1) > 90:
            return False
      else:
            for each in self.str1:
                if ord(each) < 97 or ord(each) > 122:
                  return False
            else:
                return True

    def DAS(self):
      temp = list(self.str1)
      for i in range(len(temp)):
            try:
                temp.remove(' ')
            except ValueError:
                break
      return ''.join(temp)

    # 这里借鉴了网上的思路: https://blog.csdn.net/smfswxj/article/details/79513713
    # 原理就是找出字符所在的位置,然后把那个范围里面的字符串(切片)打印出来
    def Strip(self, targ = None):
      c = 0
      nspace = []
      for each in self.str1:
            c += 1
            if each != ' ':
                nspace.append(c)

      if nspace:
            return self.str1-1: nspace[-1]]
      return ''

      

    def Count(self, value):
      c = 0
      for each in self.str1:
            if each == value:
                c += 1
      return c

    def Capitalize(self):
      return chr(ord(self.str1) - 32) + self.str1

    def Split(self, svalue):
      res = []
      length = len(self.str1)
      lchar = len(svalue)

      for i in range(length):
            index = self.str1.find(svalue)
            if index == -1:
                res.append(self.str1)
                return res
            else:
                res.append(self.str1[:index])
                self.str1 = self.str1


    def Title(self):
      def Value(str1):
            temp = str1.split(' ')
            for i in range(len(temp)):
                temp = chr(ord(temp) - 32) + temp
                yield temp

      return ' '.join(Value(self.str1))
      # 这里附上普通做法,比较直观
      """res = ''
      for each in Value(self.str1):
            res += Print(each, end = ' ')
      return res[:-1]"""
    # 这里附上最简洁的代码
    def STitle(self):
      return ' '.join((chr(ord(temp)-32)+temp for temp in self.str1.split(' ')))

    def Lower(self):
      res = list(self.str1)
      temp = []
      for i in range(len(res)):
            if not (ord(res) < 65 or ord(res) > 90):
                temp.append(chr(ord(res) + 32))
      return ''.join(temp)

    def Find(self,target):
      i, j = 0,0
      length = len(target)
      for k in range(len(self.str1)+1):
            if self.str1 == target:
                return i
            if j >= length:
                i += 1
            j += 1
      return -1         
   

# 没想到好的解法,把一位鱼油的代码搬了过来,简单删减了一下
def Print(*values,sep=None,end=''):
    if sep is None:
      sep=''
    return sep.join((str(i) for i in values))+end

def Str(sth):
    return MyStr(sth)

永恒的蓝色梦想 发表于 2020-4-10 11:48:46

124行    # len其实不算内置的,但还是写上吧len是内置的哦

qiuyouzhi 发表于 2020-4-10 11:53:12

永恒的蓝色梦想 发表于 2020-4-10 11:48
124行len是内置的哦

我的意思是不是字符串内置的
字符串不能:
str1.len()

永恒的蓝色梦想 发表于 2020-4-10 11:53:46

>>> int('   78')
78
>>> '      78'.isdigit()
False

永恒的蓝色梦想 发表于 2020-4-10 12:00:32

qiuyouzhi 发表于 2020-4-10 11:53
我的意思是不是字符串内置的
字符串不能:

是str1.__len__(){:10_255:}
页: [1]
查看完整版本: Python 重构字符串的内置方法