【问题标题】:Overloading the del operator in a mutable string class python在可变字符串类python中重载del运算符
【发布时间】:2015-03-25 09:00:15
【问题描述】:

我很难编辑内置的 del 运算符并满足我的作业限制。

在我的 Python 课程中,我的教授希望我们从一个名为 Mutstr 的类开始,该类用于使字符串可变。在包含字符串“oogyboogy”的 Mutstr 实例中,在三个 del 命令中,他希望我们摆脱字符串“oogyboogy”中的“gyb”。

叹息。如此糟糕的作业……无论如何。

我在下面有两个代码 sn-ps 完成摆脱“gyb”。

不幸的是,我的两个版本都依赖于一个 del 命令。我相信我的教授想要三个单独的调用来逐个索引删除这些每个索引。

什么是遍历整个字符串的最佳方法,评估每个索引以检查它是否是“oogyboogy”中间字符“gyb”的特定成员

现在,当我运行它时,这两个都可以工作:

>>> one = Mutstr('oogyboogy')
>>> del one[2]
>>> one.get()
'oooogy'

我认为这是正确的答案。但是,我认为我完成它的方式不符合他的问题限制:

class Mutstr():
    def __init__(self,st = ""):
          self.str = st

    def get(self):
          return self.str

    def __delitem__(self, index):
          self.str = self.str[:index] + self.str[index+3:]

我有另一个版本在这里做同样的事情:

    def __delitem__(self, index):
      if 'g' in self.str:
          self.str = self.str[:index] + self.str[index+1:]
      if 'y' in self.str:
          self.str = self.str[:index] + self.str[index+1:]
      if 'b' in self.str:
          self.str = self.str[:index] + self.str[index+1:]

【问题讨论】:

  • 您确定您的预期输出是“oooogy”而不是“oooo”吗?要求是删除 'g''y''b' 字母还是删除 'gyb' 字符串?
  • 我很乐意听取人们如何完成您的建议。由于这个问题的措辞很糟糕,我想以尽可能多的方式解决这个问题。

标签: python string operator-overloading mutable


【解决方案1】:

按照我阅读作业的方式,您的教授可能正在寻找类似的东西:

class Mutstr(object):
    def __init__(self, st=""):
          self.st = st

    def get(self):
          return self.st

    def __delitem__(self, index):
          self.st = self.st[:index] + self.st[index+1:]

one = Mutstr('oogyboogy')
del one[4]
del one[3]
del one[2]
print one.get()

【讨论】:

  • 嗯,直到你的建议,我什至没有考虑先用最大的索引来接近它。我将不得不修补这个。
  • 这就是我思考自己代码的方式。我有一个很好的主意,我很接近。感谢您帮助我以不同的方式看待它。
【解决方案2】:

您的教授几乎肯定想要这些语义:

>>> one = Mutstr('oogyboogy')
>>> del one[2] # deletes g
>>> del one[2] # deletes y
>>> del one[2] # deletes b
>>> one.get()
'oooogy'

所以,您应该只删除__delitem__ 中的一个字符。不要对 __delitem__ 函数中的字符值进行硬编码,这太不礼貌了。

【讨论】:

  • 是的,那是我尝试以不同的方式解决问题。我已经对此感觉好多了。感谢您的建议。
猜你喜欢
  • 1970-01-01
  • 2012-09-24
  • 1970-01-01
  • 2018-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-05
  • 1970-01-01
相关资源
最近更新 更多