Home » Articole » Articole » Calculatoare » Programare » Python » Programarea în Python: Șirurile ca un caz special al listelor

Programarea în Python: Șirurile ca un caz special al listelor

postat în: Python 0

Prezentăm un truc grozav care se poate face cu șiruri:


def shout(string):
    for character in string:
        print("Gimme an " + character)
        print("'" + character + "'")

shout("Lose")

def middle(string):
    print("The middle character is:", string[len(string) // 2])

middle("abcdefg")
middle("The Python Programming Language")
middle("Atlanta")

Și ieșirea este:

Gimme an L
'L'
Gimme an o
'o'
Gimme an s
's'
Gimme an e
'e'
The middle character is: d
The middle character is: r
The middle character is: a

Ceea ce demonstrează aceste programe este că șirurile sunt similare listelor în mai multe moduri. Funcția shout() arată că buclele for pot fi folosite cu șiruri de caractere la fel cum pot fi folosite cu liste. Procedura de mijloc arată că acele șiruri de caractere pot folosi, de asemenea, funcția len() și indici și părți de matrice. Cele mai multe caracteristici ale listei funcționează și pe șiruri.

Următoarea caracteristică demonstrează câteva caracteristici specifice șirului:


def to_upper(string):
    ## Converts a string to upper case
    upper_case = ""
    for character in string:
        if 'a' <= character <= 'z':
            location = ord(character) - ord('a')
            new_ascii = location + ord('A')
            character = chr(new_ascii)
        upper_case = upper_case + character
    return upper_case

print(to_upper("This is Text"))

cu ieșirea fiind:

THIS IS TEXT

Acest lucru funcționează deoarece computerul reprezintă caracterele unui șir ca numere de la 0 la 1.114.111. De exemplu, „A” este 65, „B” este 66 și א este 1488. Valorile sunt în format unicod. Python are o funcție numită ord()(prescurtare de la ordinal) care returnează un caracter ca număr. Există, de asemenea, o funcție corespunzătoare numită chr() care convertește un număr într-un caracter. Având în vedere acest lucru, programul ar trebui să înceapă să fie clar. Primul detaliu este linia: if 'a' <= character <= 'z': care verifică dacă o literă este cu minuscule. Dacă este, atunci se folosesc rândurile următoare. Mai întâi este convertit într-o locație astfel încât a = 0, b = 1, c = 2 și așa mai departe cu linia: location = ord(character) -
ord('a')
. Apoi noua valoare este găsită cu new_ascii = location +
ord('A')
. Această valoare este convertită înapoi într-un caracter care este acum majuscule. Rețineți că, dacă aveți nevoie într-adevăr de majuscule ale unei litere, ar trebui să utilizați u=var.upper() care va funcționa și cu alte limbaje.

Acum, pentru un exercițiu interactiv de tastare:

>>> # De la întreg la șir
>>> 2
2
>>> repr(2)
'2'
>>> -123
-123
>>> repr(-123)
'-123'
>>> # De la șit la întreg
>>> "23"
'23'
>>> int("23")
23
>>> "23" * 2
'2323'
>>> int("23") * 2
46
>>> # De la float la șir
>>> 1.23
1.23
>>> repr(1.23)
'1.23'
>>> # De la float la întreg
>>> 1.23
1.23
>>> int(1.23)
1
>>> int(-1.23)
-1
>>> # De la șit la float
>>> float("1.23")
1.23
>>> "1.23" 
'1.23'
>>> float("123")
123.0

Dacă nu ați ghicit deja, funcția repr() poate converti un număr întreg într-un șir, iar funcția int() poate converti un șir într-un număr întreg. Funcția float() poate converti un șir într-un float. Funcția repr() returnează o reprezentare imprimabilă a ceva. Iată câteva exemple în acest sens:

>>> repr(1)
'1'
>>> repr(234.14)
'234.14'
>>> repr([4, 42, 10])
'[4, 42, 10]'

Funcția int() încearcă să convertească un șir (sau un float) într-un număr întreg. Există, de asemenea, o funcție similară numită
float()
care va converti un întreg sau un șir într-un float. O altă funcție pe care o are Python este funcția eval(). Funcția
eval()
ia un șir și returnează date de tipul pe care Python crede că le-a găsit. De exemplu:

>>> v = eval('123')
>>> print(v, type(v))
123 <type 'int'>
>>> v = eval('645.123')
>>> print(v, type(v))
645.123 <type 'float'>
>>> v = eval('[1, 2, 3]')
>>> print(v, type(v))
[1, 2, 3] <type 'list'>

Dacă utilizați funcția eval(), ar trebui să verificați dacă returnează tipul la care vă așteptați.

O funcție șir utilă este metoda split(). Iată un exemplu:

>>> "This is a bunch of words".split()
['This', 'is', 'a', 'bunch', 'of', 'words']
>>> text = "First batch, second batch, third, fourth"
>>> text.split(",")
['First batch', ' second batch', ' third', ' fourth']

Observați cum split() convertește un șir într-o listă de șiruri. Șirul este împărțit implicit prin spații albe sau după argumentul opțional (în acest caz o virgulă). De asemenea, puteți adăuga un alt argument care spune lui split() de câte ori va fi folosit separatorul pentru a împărți textul. De exemplu:

>>> list = text.split(",")
>>> len(list)
4
>>> list[-1]
' fourth'
>>> list = text.split(",", 2)
>>> len(list)
3
>>> list[-1]
' third, fourth'

Tăierea șirurilor (și listelor)

Șirurile pot fi tăiate în piese — în același mod în care a fost arătat pentru liste din capitolul anterior — folosind operatorul „de tăiere[]. Operatorul de tăiere funcționează în același mod ca și înainte: text[first_index:last_index] (în cazuri foarte rare pot exista alte două puncte și un al treilea argument, ca în exemplul prezentat mai jos).

Pentru a nu fi confundat cu numerele de index, cel mai ușor este să le vedeți ca locuri de tăiere, posibilități de a tăia un șir în părți. Iată un exemplu, care arată locurile de tăiere (în galben) și numerele lor de index (roșu și albastru) pentru un șir de text simplu:

0 1 2 -2 -1
text = S T R I N G
[: :]

Rețineți că indicii roșii sunt numărați de la începutul șirului, iar cei albaștri de la sfârșitul șirului înapoi. (Rețineți că nu există -0 albastru, care ar putea părea a fi logic la sfârșitul șirului. Deoarece -0 == 0, -0 înseamnă și „începutul șirului”.) Acum suntem gata să folosim indexuri pentru operațiunile de tăiere:

text[1:4] „TRI”
text[:5] „STRIN”
text[:-1] „STRIN”
text[-4:] „RING”
text[2] „R”
text[:] „STRING”
text[::-1] „GNIRTS”

text[1:4] ne dă întregul șir de text dintre locurile de tăiere 1 și 4, „TRI„. Dacă omiteți unul dintre argumentele [first_index:last_index], obțineți începutul sau sfârșitul șirului implicit: text[:5] dă „STRIN„. Atât pentru first_index, cât și pentru last_index putem folosi atât schema de numerotare roșie, cât și albastră: text[:-1] dă la fel ca text[:5], deoarece indexul -1 este în același loc cu 5 în acest caz. Dacă nu folosim un argument care conține două puncte, numărul este tratat într-un mod diferit: text[2 ne dă un caracter după al doilea punct de tăiere, „R„. Operațiunea specială de tăiere text[:] înseamnă „de la început până la sfârșit” și produce o copie a întregului șir (sau a listei, așa cum se arată în capitolul anterior).

Nu în ultimul rând, operația de tăiere poate avea un al doilea punct și un al treilea argument, care este interpretat ca „dimensiunea pasului”: text[::-1] este text de la început până la sfârșit, cu dimensiunea pasului de -1 . -1 înseamnă „fiecare caracter, dar în cealaltă direcție”. „STRING” înapoi este „GNIRTS” (testați o lungime de pas de 2, dacă nu ați înțeles punctul aici).

Toate aceste operațiuni de tăiere funcționează și cu liste. În acest sens, șirurile sunt doar un caz special de liste, în care elementele listei sunt caractere simple. Amintiți-vă doar conceptul de locuri de tăiere, iar indexurile pentru tăierea lucrurilor vor deveni mult mai puțin confuze.

Exemple


# Acest program necesită o înțelegere excelentă a numerelor zecimale.
def to_string(in_int):
    """Converts an integer to a string"""
    out_str = ""
    prefix = ""
    if in_int < 0:
        prefix = "-"
        in_int = -in_int
    while in_int // 10 != 0:
        out_str = str(in_int % 10) + out_str
        in_int = in_int // 10
    out_str = str(in_int % 10) + out_str
    return prefix + out_str

def to_int(in_str):
    """Converts a string to an integer"""
    out_num = 0
    if in_str[0] == "-":
        multiplier = -1
        in_str = in_str[1:]
    else:
        multiplier = 1
    for c in in_str:
        out_num = out_num * 10 + int(c)
    return out_num * multiplier

print(to_string(2))
print(to_string(23445))
print(to_string(-23445))
print(to_int("14234"))
print(to_int("12345"))
print(to_int("-3512"))

Ieșirea este

2
23445
-23445
14234
12345
-3512

(Include texte din Wikibooks traduse și adaptate de Nicolae Sfetcu)

Ghid Facebook pentru utilizatori
Ghid Facebook pentru utilizatori

Facebook este, de departe, cea mai cunoscută reţea socială, care permite utilizatorilor înregistraţi să îşi creeze profiluri proprii, să încarce şi să partajeze cu prietenii fotografii şi clipuri video, să trimită mesaje şi să păstreze legătura cu prietenii, familia şi … Citeşte mai mult

Nu a fost votat 8.91 lei Selectează opțiunile Acest produs are mai multe variații. Opțiunile pot fi alese în pagina produsului.
Introducere în Business Intelligence
Introducere în Business Intelligence

Colecția ȘTIINȚA INFORMAȚIEI ”Introducere în Business Intelligence” oferă cititorilor informații cuprinzătoare despre business intelligence, explorând toate aspectele importante ale inteligenței de afaceri în scenariul actual. Subiectele tratate se referă la abordările de bază ale business intelligence. Cartea își propune să … Citeşte mai mult

Nu a fost votat 13.39 lei24.05 lei Selectează opțiunile Acest produs are mai multe variații. Opțiunile pot fi alese în pagina produsului.
Inteligența, de la originile naturale la frontierele artificiale - Inteligența Umană vs. Inteligența Artificială
Inteligența, de la originile naturale la frontierele artificiale – Inteligența Umană vs. Inteligența Artificială

Istoria paralelă a evoluției inteligenței umane și a inteligenței artificiale este o călătorie fascinantă, evidențiind căile distincte, dar interconectate, ale evoluției biologice și inovației tehnologice. Această istorie poate fi văzută ca o serie de evoluții interconectate, fiecare progres în inteligența … Citeşte mai mult

Nu a fost votat 22.35 lei48.65 lei Selectează opțiunile Acest produs are mai multe variații. Opțiunile pot fi alese în pagina produsului.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *