web-dev-qa-db-fra.com

Python: Existe-t-il un équivalent de milieu, droit et gauche de BASIC?

Je veux faire quelque chose comme ça:

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

Aidez-moi!

22
pythonprogrammer

tranches à la rescousse :)

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

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

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

Si je me souviens de mon QBasic, right, left et mid font quelque chose comme ceci:

>>> 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

15
frnhr

Merci Andy W

J'ai trouvé que le mid () ne fonctionnait pas comme prévu et j'ai modifié comme suit

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

J'ai effectué le test suivant:

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))

Ce qui a abouti à:

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

C'était ce à quoi je m'attendais. Le code mid () d'origine produit ceci:

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

Mais les fonctions left () et right () fonctionnent bien. Je vous remercie.

1
Stanton Attree

Vous pouvez utiliser cette méthode aussi il agira comme ça

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]

J'espère que ça va aider

1
user6474469

C'est la solution d'Andy. Je viens de répondre à la préoccupation de User2357112 et lui ai donné des noms de variables significatifs. Je suis un débutant en Python et j'ai préféré ces fonctions.

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]
0
Jim Sullivan

Celles-ci fonctionnent très bien pour lire les caractères "n" gauche/droite d'une chaîne, mais, du moins avec BBC BASIC, les fonctions LEFT$() et RIGHT$() vous permettaient de modifier également les caractères "n" gauche/droit ...

Par exemple.:

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

Produirait:

00ABC

Edit: Depuis que j'ai écrit ça, j'ai mis au point ma propre solution ...

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

Pour renvoyer n caractères que vous appelez 

substring = left(string,<n>)

Où la valeur par défaut est 1 si non fourni. La même chose est vraie pour right ()

Pour changer les n caractères gauche ou droit d'une chaîne que vous appelez

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

Cela prendrait les n premiers caractères de la sous-chaîne et écraserait les n premiers caractères de la chaîne, renvoyant le résultat dans newstring. La même chose fonctionne pour right ().

0
Gareth Lock