Строковые операции и методы; форматирование строки

Основные методы строкового типа, операция %.

  • {o} — тема по Linux

  • <!> ­— необязательная тема

Домашнее задание

  • {i} — теоретическое задание

  • {*} — новая тема

  1. {i} Почитать: Строки и Строки Unicode и Строки символов (внимание! устаревший текст)

  2. Таблица умножения
    1. вывести таблицу умножения на 3 от 1 до 12
      •    1 #!/usr/bin/env python
           2 # -*- coding: utf-8 -*-
           3 
           4 '''вывести таблицу умножения на 3 от 1 до 12'''
           5 for i in xrange(1,12):
           6   print "3 * %-2d = %d"%(i,i*3)
        
        multab3a.py
    2. вывести всю таблицу умножения от 1 до 12 в три колонки в виде
      •    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 ""	# для красоты
        
        multab3.py
    3. вывести всю таблицу умножения от 1 до 12 как можно красивее!
      •    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
        
        multab.py
  3. ввести строку, затем слово. Определить, сколько раз в строке встречается заданное слово.
    •    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
      
      вариант "в лоб"
    •    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
      
      вариант с использованием `find()`
    • Определить, сколько раз в строке встречается первое слово этой строки

      •    1 #!/usr/bin/env python
           2 # -*- coding: utf-8 -*-
           3 
           4 '''Определить, сколько раз в строке встречается первое слово этой строки 
           5 '''
           6 
           7 l=raw_input('Введите строку: ').split(" ")
           8 print l[1:].count(l[0])
        
        wordstrs.py
  4. В заданной строке удалить все лишние пробелы.
    •    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 #!/usr/bin/env python
         2 # -*- coding: utf-8 -*-
         3 
         4 '''В заданной строке удалить все лишние пробелы.'''
         5 
         6 s,n=raw_input(),[]
         7 
         8 for c in s.split(" "):
         9   # несколько пробелов подряд превращаются в последовательнсть пустых строк
        10   if c:
        11     n.append(c)
        12 print " ".join(n)
      
      Вариант с использованием split() и join()
    • {*} Вариант с циклическим элементом:

         1     print " ".join([c for c in raw_input().split(" ") if c])
      
  5. Статистика. Дан текст. Напишите программу, определяющую процентное отношение строчных и прописных букв к общему числу символов в нем.
    • Решается с помощью isupper() и islower(), текст любого размера можно просто Copy+Paste-ить (лишь бы в одну строку)

    •    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))
      
      staty.py


CategoryClass CategoryVmsh

LecturesVMSH/2009-11-25 (последним исправлял пользователь eSyr 2010-10-07 14:58:10)