next up previous contents
Далее: Работа с файлами Наверх: Курс языка Python для начинающих Назад: Возвращаемся к спискам   Содержание

В этой главе

Строки возвращаются

Представляем интересный прием, который можно проделать со строками:

def shout(string):
    for character in string:
        print "Gimme a "+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")

Результат:

Gimme a L
'L'
Gimme a o
'o'
Gimme a s
's'
Gimme a e
'e'
The middle character is: d
The middle character is: r
The middle character is: a
Эта программа демонстрирует, что строки несколько похожи на списки. Функция shout демонстрирует, что циклы for могут быть использованы со строками так же, как и со списками. Функция middle демонстрирует, что к строкам применима функция len, индексирование и интервалы. Большая часть функций обработки списков также применима и к строкам.

Следующая программа демонстрирует некоторые специальные свойства строк.

def to_upper(string):
    ## Переводит буквы строки в заглавные
    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")
Результат:
THIS IS TEXT
Такой результат получается потому, что компьютер представляет литеры строки как числа от 0 до 255. В Python есть функция ord (сокращение от ordinal), которая выдает число, соответствующее данной литере. Есть также обратная функция chr, которая переводит число в литеру. После этих пояснений программа должна стать понятнее. Первая деталь – команда if 'a' <= character <= 'z':, которая проверяет, прописная ли данная литера. Если так, то выполняются последующие команды. Сначала литеры представляются числами, так, что a=0, b=1, c=2, и т.д. командой location = ord(character) - ord('a'). Далее находится новое значение как new_ascii = location + ord('A'). Оно переводится назад в литеру, которая стала заглавной.

А сейчас небольшое упражнение на работу в диалоговом режиме:

>>> #Перевод целого в строку
... 
>>> 2
2
>>> repr(2)
'2'
>>> -123
-123
>>> repr(-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

Если вы еще не догадались, то функция repr переводит целое число в строку, а функция int переводит строку в целое число. Функция float переводит строку в число с десятичной точкой. Функция repr выдает печатную форму чего-либо. Примеры этого:

>>> repr(1)
'1'
>>> repr(234.14)
'234.14'
>>> repr([4,42,10])
'[4, 42, 10]'
Функция int пытается перевести строку (или число с десятичной точкой) в целое число. Есть также похожая функция float, которая переводит строку или целое число в число с десятичной точкой. Еще одна функция – 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. Пример:

>>> import string
>>> string.split("This is a bunch of words")
['This', 'is', 'a', 'bunch', 'of', 'words']
>>> string.split("First batch, second batch, third, fourth",",")
['First batch', ' second batch', ' third', ' fourth']
Обратите внимание, что split переводит строку в список строк. Строка делится по пробелам по умолчанию, или по необязательному второму аргументу (в нашем случае – запятой).

Примеры

#Требуется хорошее понимание десятичных чисел
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 = chr(ord('0')+in_int % 10) + out_str
        in_int = in_int / 10
    out_str = chr(ord('0')+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 x in range(0,len(in_str)):
        out_num = out_num * 10 + ord(in_str[x]) - ord('0')
    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")

Результат:

2
23445
-23445
14234
12345
-3512


next up previous contents
Далее: Работа с файлами Наверх: Курс языка Python для начинающих Назад: Возвращаемся к спискам   Содержание
Джош Коглиати jjc@honors.montana.edu Версия Wikibooks: Курс языка Python Для начинающих на Wikibooks