Строковые операции и методы; форматирование строки
Основные методы строкового типа, операция %.
— тема по Linux
— необязательная тема
Строковые методы split(), join(), find(), index(), startswith() и другие
Понятие кодировки, методы encode() и decode()
- Строки Unicode
- Форматирование строк в старом стиле
Домашнее задание
— теоретическое задание
— новая тема
Почитать: Строки и Строки Unicode и Строки символов (внимание! устаревший текст)
- Таблица умножения
- вывести таблицу умножения на 3 от 1 до 12
- вывести всю таблицу умножения от 1 до 12 в три колонки в виде
- multab3.py
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 4 '''Вывести всю таблицу умножения от 1 до 12 в три колонки в виде 5 ... 6 4*7 = 28 4*8 = 32 4*9 = 36 7 4*10= 40 4*11= 44 4*12= 48 8 ... 9 ''' 10 11 for n in xrange(1,13): 12 for m in xrange(1,13): 13 # Если m делится на 3, выводится не пробел, а перевод строки ("\n") 14 print "%2d * %-2d = %3d%s"%(n,m,n*m, m%3 and " " or "\n"), 15 print "" # для красоты
- вывести всю таблицу умножения от 1 до 12 как можно красивее!
- multab.py
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 4 '''Вывести всю таблицу умножения от 1 до 12 как можно красивее 5 +-------------+-------------------+-------------------+ 6 | X*1 X*7 | (X+1)*1 (X+1)*7 | (X+2)*1 (X+2)*7 | 7 | X*2 X*8 | (X+1)*2 (X+1)*8 | (X+2)*2 (X+2)*8 | 8 . . . 9 | X*6 X*12 | (X+1)*6 (X+1)*12 | (X+2)*6 (X+2)*12 | 10 +-------------+-------------------+-------------------+ 11 . . . 12 ''' 13 14 r=("+"+"-"*22)*3+"+" 15 # 4 блока по 6 строчек на блок 16 for b in xrange(4): 17 print r 18 for l in xrange(1,7): 19 # шесть полей в строке 20 for f in xrange(6): 21 X=1+b*3+f/2 22 N=l+(f%2)*6 23 print "%s%2d*%-2d=%-3d"%(f%2 and " " or "| ",X,N,X*N), 24 print "|" 25 else: 26 print r
- ввести строку, затем слово. Определить, сколько раз в строке встречается заданное слово.
- вариант "в лоб"
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 4 '''Ввести строку, затем слово. 5 Определить, сколько раз в строке встречается заданное слово. 6 Вариант без использования строковых методов. 7 Ошибка: ложное распознавание слова "abc" внутри слова "dabce" 8 Ошибка: дожное двойное распознавание слова "abab" в слове "ababab" 9 ''' 10 11 l,w=raw_input('Введите строку: '),raw_input('Введите слово: ') 12 count=0 13 for i in xrange(len(l)-len(w)+1): 14 for j in xrange(len(w)): 15 if l[i+j]!=w[j]: 16 break 17 else: 18 count+=1 19 print count
- вариант с использованием `find()`
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 4 '''Ввести строку, затем слово. 5 Определить, сколько раз в строке встречается заданное слово. 6 Вариант с использованием find() 7 Ошибка: ложное распознавание слова "abc" внутри слова "dabce" 8 ''' 9 10 l,w=raw_input('Введите строку: '),raw_input('Введите слово: ') 11 count=0 12 p=l.find(w) 13 while p>=0: 14 count+=1 15 p=l.find(w,p+len(w)) 16 print count
Определить, сколько раз в строке встречается первое слово этой строки
- В заданной строке удалить все лишние пробелы.
- Вариант "в лоб"
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 4 '''Вывести всю таблицу умножения от 1 до 12 в три колонки в виде 5 ... 6 4*7 = 28 4*8 = 32 4*9 = 36 7 4*10= 40 4*11= 44 4*12= 48 8 ... 9 ''' 10 11 for n in xrange(1,13): 12 for m in xrange(1,13): 13 # Если m делится на 3, выводится не пробел, а перевод строки ("\n") 14 print "%2d * %-2d = %3d%s"%(n,m,n*m, m%3 and " " or "\n"), 15 print "" # для красоты
- Вариант с использованием split() и join()
Вариант с циклическим элементом:
1 print " ".join([c for c in raw_input().split(" ") if c])
- Статистика. Дан текст. Напишите программу, определяющую процентное отношение строчных и прописных букв к общему числу символов в нем.
Решается с помощью isupper() и islower(), текст любого размера можно просто Copy+Paste-ить (лишь бы в одну строку)
- staty.py
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 4 '''Дан текст. Напишите программу, определяющую процентное отношение 5 строчных и прописных букв к общему числу символов в нем.''' 6 7 s=raw_input() 8 St,Pr=0,0 9 for c in s: 10 if c.isupper(): 11 St+=1 12 elif c.islower(): 13 Pr+=1 14 print "Строчные %d%%, прописные %d%%"%(100.*St/len(s),100.*Pr/len(s))