【问题标题】:Python: Is there an equivalent of mid, right, and left from BASIC?Python:BASIC 中是否有对应的 mid、right 和 left?
【发布时间】:2014-04-30 10:41:06
【问题描述】:

我想做这样的事情:

    >>> mystring = "foo"
    >>> print(mid(mystring))

救命!

【问题讨论】:

  • BASIC 中的mid 有什么作用?
  • 我怀疑 midleftright 需要额外的参数,对吧?
  • 它们确实需要 BASIC 中的其他参数。左右两个,中间两个或三个

标签: python basic


【解决方案1】:

切片救援 :)

def left(s, amount):
    return s[:amount]

def right(s, amount):
    return s[-amount:]

def mid(s, offset, amount):
    return s[offset:offset+amount]

【讨论】:

  • 小心right 函数。 'asdf'[-0:] == 'asdf',不是''
  • @user2357112 当然,你是对的。提供代码的目的是为了说明 Python 和 Basic 中的函数如何对应
  • 别忘了:如果amount>s 中的字符数多,left() 和right() 可能会返回错误。
  • mid() 函数必须替换为下面的答案。
【解决方案2】:

如果我记得我的 QBasic,右、左和中做这样的事情:

>>> s = '123456789'
>>> s[-2:]
'89'
>>> s[:2]
'12'
>>> s[4:6]
'56'

http://www.angelfire.com/scifi/nightcode/prglang/qbasic/function/strings/left_right.html

【讨论】:

    【解决方案3】:

    谢谢安迪W

    我发现 mid() 并没有像我预期的那样工作,我修改如下:

    def mid(s, offset, amount):
        return s[offset-1:offset+amount-1]
    

    我进行了以下测试:

    print('[1]23', mid('123', 1, 1))
    print('1[2]3', mid('123', 2, 1))
    print('12[3]', mid('123', 3, 1))
    print('[12]3', mid('123', 1, 2))
    print('1[23]', mid('123', 2, 2))
    

    导致:

    [1]23 1
    1[2]3 2
    12[3] 3
    [12]3 12
    1[23] 23
    

    这正是我所期待的。原始的 mid() 代码产生了这个:

    [1]23 2
    1[2]3 3
    12[3] 
    [12]3 23
    1[23] 3
    

    但是 left() 和 right() 函数可以正常工作。谢谢。

    【讨论】:

      【解决方案4】:

      你可以使用这个方法,它也会像那样操作

      thadari=[1,2,3,4,5,6]
      
      #Front Two(Left)
      print(thadari[:2])
      [1,2]
      
      #Last Two(Right)# edited
      print(thadari[-2:])
      [5,6]
      
      #mid
      mid = len(thadari) //2
      
      lefthalf = thadari[:mid]
      [1,2,3]
      righthalf = thadari[mid:]
      [4,5,6]
      

      希望对你有帮助

      【讨论】:

      • 我得到 [1, 2, 3, 4] 作为 print(thadari[:-2]) 的输出
      【解决方案5】:

      这些非常适合从字符串中读取左/右“n”个字符,但是,至少对于 BBC BASIC,LEFT$()RIGHT$() 函数也允许您更改左/右“n”个字符。 ..

      例如:

      10 a$="00000"
      20 RIGHT$(a$,3)="ABC"
      30 PRINT a$
      

      会产生:

      00ABC
      

      编辑:自从写了这篇文章后,我想出了自己的解决方案......

      def left(s, amount = 1, substring = ""):
          if (substring == ""):
              return s[:amount]
          else:
              if (len(substring) > amount):
                  substring = substring[:amount]
              return substring + s[:-amount]
      
      def right(s, amount = 1, substring = ""):
          if (substring == ""):
              return s[-amount:]
          else:
              if (len(substring) > amount):
                  substring = substring[:amount]
              return s[:-amount] + substring
      

      要返回你要调用的 n 个字符

      substring = left(string,<n>)
      

      如果未提供,则默认为 1。 right() 也是如此

      更改您要调用的字符串的左或右 n 个字符

      newstring = left(string,<n>,substring)
      

      这将获取子字符串的前 n 个字符并覆盖字符串的前 n 个字符,并以 newstring 形式返回结果。 right() 也一样。

      【讨论】:

      【解决方案6】:

      这是安迪的解决方案。我刚刚解决了 User2357112 的问题,并给了它有意义的变量名。我是 Python 菜鸟,喜欢这些功能。

      def left(aString, howMany):
          if howMany <1:
              return ''
          else:
              return aString[:howMany]
      
      def right(aString, howMany):
          if howMany <1:
              return ''
          else:
              return aString[-howMany:]
      
      def mid(aString, startChar, howMany):
          if howMany < 1:
              return ''
          else:
              return aString[startChar:startChar+howMany]
      

      【讨论】:

        【解决方案7】:

        如果您正在寻找布尔结果,Python 中有用于“右”和“左”的内置函数。

        str = "this_is_a_test"
        left = str.startswith("this")
        print(left)
        > True
        
        right = str.endswith("test")
        print(right)
        > True
        

        【讨论】:

        • rightleft 基本返回字符串的一部分,而不是布尔值。
        【解决方案8】:

        根据上面的 cmets,Right() 函数似乎可以重构以更好地处理错误。这似乎有效:

        def right(s, amount):
            if s == None:
                return None
            elif amount == None:
                return None # Or throw a missing argument error
            s = str(s)
            if amount > len(s):
                return s
            elif amount == 0:
                return ""
            else:
                return s[-amount:]
        
        print(right("egg",2))
        print(right(None, 2))
        print(right("egg", None))
        print(right("egg", 5))
        print("a" + right("egg", 0) + "b")
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-02-08
          • 2019-06-09
          • 2012-10-03
          • 2016-04-05
          • 1970-01-01
          • 1970-01-01
          • 2020-01-26
          • 2011-03-12
          相关资源
          最近更新 更多