Водич за Пајтон 2.6/Повратак низова

А сада Вам представљамо кул трик који можете да урадите са низовима:

def узвик(низ):
    for карактер in низ:
        print "Дај ми " + карактер
        print "'" + карактер + "'"
узвик("Изгубити")

def средњи(низ):
    print "Средњи карактер је:", низ[len(низ) / 2]

средњи("абвгдђ")
средњи("Пајтон програмски језик")
средњи("Атланта")

Излаз је:

Дај ми И
'И'
Дај ми з
'з'
Дај ми г
'г'
Дај ми у
'з'
Дај ми б
'б'
Дај ми и
'и'
Дај ми т
'т'
Дај ми и
'и'
Средњи карактер је: д
Средњи карактер је: р
Средњи карактер је: а

Шта овај програм показује је да су низови слични листама на неколико начина. узвик() функција показује да се for петље могу користити са низовима као што се користе са листама. Процедура средњи показује да такав низ може такође да се користи као len() функција и индекси низова и делови. Већина карактеристика листи ради на низовима.

Следећа особина показује неке специфичне карактеристике низова:

def на_горњи(низ):
    ## Пребацује низ у велика слова
    велико_слово = ""
    for карактер in низ:
        if 'a' <= карактер <= 'z':
            локација = ord(карактер) - ord('a')
            нови = локација + ord('A')
            карактер = chr(нови)
        велико_слово = велико_слово + карактер
    return велико_слово

print у_целико("ово је текст")

са излазом:

ОВО ЈЕ ТЕКСТ

Ово ради зато што рачунар представља знакове низа као бројеве од 0 до 255. Паљјтон има функцију звану ord() (скраћено за редно) која враћа карактер као број. Ту је и одговарајућа функција названа chr() која преводи број у карактер. Имајући то у виду програм би требало да почне да буде јаснији. Први детаљ је линија: if 'a' <= карактер <= 'z': која проверава да види да ли је слово мало. Ако јесте онда су следеће линије коришћене. Прво се конвертује у своје место a = 0, b = 1, c = 2 и тако дање са линијом: локација = ord(карактер) - ord('a'). Следеће нова вредност је пронађена са нови = локација + ord('A'). Ова вредност се претвара назад у карактер који је сада велико слово.

Сад због неке вежбе интерактивног куцања:

>>> # Цео број у низ
>>> 2
2
>>> repr(2)
'2'
>>> -123
-123
>>> repr(-123)
'-123'
>>> `123`
'123'
>>> # Низ у цео број
>>> "23"
'23'
>>> int("23")
23
>>> "23" * 2
'2323'
>>> int("23") * 2
46
>>> # Разломак у низ
>>> 1.23
1.23
>>> repr(1.23)
'1.23'
>>> # Разломак у цео број
>>> 1.23
1.23
>>> int(1.23)
1
>>> int(-1.23)
-1
>>> # Низ у разломак
>>> float("1.23")
1.23
>>> "1.23" 
'1.23'
>>> float("123")
123.0
>>> `float("1.23")`
'1.23'

Ако до сад нисте погодили да функција repr() може да пребаци цео број у низ и да функција int() може да претвори низ у цео број. Функција float() може да пребаци низ у резломак. Функција repr() враћа штампано представљање нечега. `...` претвара скоро све у низ, исто тако. Овде су неки примери тога:

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

Функција int() покушава да претвори низ (или разломак) у цео број. Овде је слична функција под називом float() која ће протворити цео број или низ у разломак. Друга функција коју Пајтон има је eval() функција. Функција eval() узима низ и враћа податак типа који пајтон мисли да је пронашао. На пример:

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

Ако користите eval() функцију требало би да проверите да ће вратити тип који очекујете.

Једна корисна функција низова је split() метода. Овде је пример:

>>> "Ово је гомила речи".split()
['Ово', 'је', 'гомила', 'речи']
>>> текст = "Прва група, друга група, трећа, четврта"
>>> текст.split(",")
['Прва група', ' друга група', ' трећа', ' четврта']

Приметите како split() пребацује низ у листу низова. Низ је подељен размаком подразумевано или опционим аргументом (у овом случају зарезом). Такође можете да додате још један аргумент који говори split() колико пута ће се сепаратор користи да подели текст. На пример:

>>> листа = text.split(",")
>>> len(листа)
4
>>> листа[-1]
' четврта'
>>> листа = текст.split(",", 2)
>>> len(листа)
3
>>> листа[-1]
' трећа, четврта'

Дељење низова (и листи) уреди

Низови се такође могу делити — на исти начин као што смо показали за листе у претходном поглављу — коришћењем "оператора" одсецања" [:]. Оператор одсецања ради на исти начин као раније: текст[први_индекс:последњи_индекс] (у веома ретким случајевима може постојати још једна колона и трећи аргумент, као примеру приказаном испод).

Да не би збунили са индексом бројева, лалше је да их видите као исечке, могућности да исечете низ на делове. Овде је пример, који приказује исечке (у жутом делу) и бројеве њихових индекса (црвено и плаво) за једноставан текстуални низ:

0 1 2 ... -2 -1
текст = " С Т Р И Н Г "
[: :]

Имајте на уму да су црвени индекси рачунати од почетка низа и плави од краја низа, уназад. (Приметите да плави нема индекс -0, што је изгледа логично на крају низа. Зато што -0 == 0, (-0 значи "почетак низа" такође.) Сада смо спремни да користимо индексе за операцију одсецања:

текст[1:4] "ТРИ"
текст[:5] "СТРИН"
текст[:-1] "СТРИН"
текст[-4:] "РИНГ"
текст[2] "Р"
текст[:] "СТРИНГ"
текст[::-1] "ГНИРТС"

текст[1:4] нам даје све низове од текст између исечака 1 и 4, "ТРИ". Ако изоставите једно од [први_индекс:последњи_индекс] аргумената, добијате почетак или крај стринга као подразумевано: текст[:5] даје "СТРИН". За оба први_индекс и последњи_индекс можемо користити обе црвене и обе плаве шеме бројева: текст[:-1] даје исто као текст[:5], зато што је индекс -1 на истом месту као 5 у овом случају. Ако не користите аргументе који садрже две тачке, број се другачије третира: текст[2] даје нам један карактер праћен другим исечком, "Р". Специјална операција за дељење текст[:] значи "од почетка до краја" и ствара копију целог низа(или листе, као што је приказано у претходном поглављу).

Крајње али не мање важно, операција одсецања може имати друге две тачке и трећи аргумент, што се тумачи као "величина корака": текст[::-1] је текст од почетка до краја, са величином корака -1. -1 значи "сваки карактер, али у другом правцу, опадајућем облику". "СТРИНГ" отпозади је "ГНИРТС" (тестирајте корак величине 2, ако нисте ово схватили).

Све операције одсецања раде добро и са листама. У овом смислу низови су само посебан случај листи, где су елементи листе појединачни карактери. Само запамтите концепт исечака, и индекси за одсецање ће бити мање збуњујући.

Примери уреди

# Овај програм захтева одлично разумевање децималних бројева
def у_низ(у_инт):
    """Претвара цео број у низ"""
    изл_низ = ""
    префикс = ""
    if у_инт < 0:
        префикс = "-"
        у_инт = -у_инт
    while у_инт / 10 != 0:
        изл_низ = chr(ord('0') + у_инт % 10) + изл_низ
        у_инт = у_инт / 10
    изл_низ = chr(ord('0') + у_инт % 10) + изл_низ
    return префикс + изл_низ

def у_инт(у_низ):
    """Претвара низ у цео број"""
     изл_бр = 0
    if ул_низ[0] == "-":
        множилац = -1
        у_низ = у_низ[1:]
    else:
        множилац = 1
    for x in range(0, len(у_низ)):
        изл_бр = изл_бр * 10 + ord(у_низ[x]) - ord('0')
    return изл_бр * множилац

print у_стр(2)
print у_стр(23445)
print у_стр(-23445)
print у_инт("14234")
print у_инт("12345")
print у_инт("-3512")

Излаз је:

2
23445
-23445
14234
12345
-3512

Шаблон:Водич за Пајтон 2.6/Navigation