Python: Есть ли эквивалент среднего, правого и левого от BASIC?

Я хочу сделать что-то вроде этого:

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

Помогите!

8 ответов

Решение

Ломтики на помощь:)

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

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

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

Если я помню мой 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

Спасибо Энди 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 () работают нормально. Спасибо.

Вы можете использовать этот метод, и он будет действовать так

thadari=[1,2,3,4,5,6]

#Front Two(Left)
print(thadari[:2])
[1,2]

#Last Two(Right)
print(thadari[:-2])
[5,6]

#mid
mid = len(thadari) //2

lefthalf = thadari[:mid]
[1,2,3]
righthalf = thadari[mid:]
[4,5,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]

В Python есть встроенные функции для "вправо" и "влево", если вы ищете логический результат.

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

right = str.endswith("test")
print(right)
> True

Судя по комментариям выше, может показаться, что функцию 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")

Они отлично подходят для чтения левых / правых "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, если не указан. То же самое верно для права ()

Чтобы изменить левый или правый n символов строки, которую вы бы назвали

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

Это будет принимать первые n символов подстроки и перезаписывать первые n символов строки, возвращая результат в newstring. То же самое работает для права ().

Другие вопросы по тегам