Модераторы: Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Python] Подсчет символов в строке, СРОЧНО!!! 
V
    Опции темы
Paranorma
Дата 24.5.2007, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 102
Регистрация: 1.1.2007

Репутация: 1
Всего: 1



 smile  smile 
Ребята, простите, что надоедаю постоянно, но очень нужна ваша помощь и срочно.
Вот так звучит задание:
вводятся строки,
надо посчитать сколько раз повторяются разные 
символы в этих строках. 
То есть посчитать сколько: "a", "A", ... "z", "Z";
а также любых других символов: ".", "#" и т.д.

До меня просто не доходит, как все это написать, ведь не повторять же один и тот же фрагмент программы для каждого символа. Ранее я делала вот какое задание:
Код

a = []
while True:
    s = raw_input(">>>")
    if not s:
        break
    a.append(s)
aCnt = 0
bCnt = 0
cCnt = 0
i = 0
while i < len(a):
    s = a[i]
    j = 0
    while j < len(s):
        c = s[j]
        if c == "a":
            aCnt = aCnt+1
        if c == "b":
            bCnt = bCnt+1
        if c == "c":
            cCnt = cCnt+1
        j= j+1
    i = i+1
print aCnt, bCnt, cCnt           


Но тут совсем все просто было, а как быть если надо все символы учесть и даже знаки препинания? smile 
PM MAIL Skype Jabber MSN   Вверх
Бонифаций
Дата 24.5.2007, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 827
Регистрация: 15.9.2005
Где: Brisbane

Репутация: 1
Всего: 40



Заведите хэш по буквам



Код

from pprint import pprint
letters = {}

while True:
   line = raw_input(">>>")
   if not line:
       break
   for litera in line:
      counter = letters.get(litera,0)
      counter += 1
      letters[litera] = counter


pprint(letters)






--------------------
 Бонифаций.
 
PM MAIL ICQ Skype GTalk Jabber YIM   Вверх
Paranorma
Дата 24.5.2007, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 102
Регистрация: 1.1.2007

Репутация: 1
Всего: 1



Извините, что значит хэш? Я просто пока реально многого не знаю?
PM MAIL Skype Jabber MSN   Вверх
setq
Дата 25.5.2007, 16:10 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











(словарь)
  Вверх
Paranorma
Дата 25.5.2007, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 102
Регистрация: 1.1.2007

Репутация: 1
Всего: 1



Я все же сама эту задачку осилила

Код

a = []
dictionary = {}
while True:
    s = raw_input(">>>")
    if not s:
        break
    a.append(s)
i = 0
while i < len(a):
    s = a[i]
    j = 0
    while j < len(s):
        l = s[j] 
        if  dictionary.has_key(l):
            dictionary[l] = dictionary[l]+1
        else:
            dictionary[l] = 1
        j = j+1
    i = i+1
print dictionary


Но препод еще вот как велел переделать задание:
Вобщем то правильно, но есть два замечания:
- Список - "a" вобщем то не нужен;
- Печать словаря выглядит не красиво, хотелось бы
  чтобы результат выглядел так:
  a - ...
  b - ...
  .......

Насколько я понимаю, тут метод sort потребуется... Что можете посоветовать?  smile 
PM MAIL Skype Jabber MSN   Вверх
setq
Дата 25.5.2007, 23:09 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Да. Хорошая идея. Можно преобразовать словарь к списку ключей/значений и затем отсортировать (можно даже с параметром key, для скорости).

Код

L.sort(key=lambda z: z[0])

  Вверх
Paranorma
Дата 28.5.2007, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 102
Регистрация: 1.1.2007

Репутация: 1
Всего: 1



Выручайте, плиз... Снова у меня ничего не вышло. Мне преподаватель дал еще одну подсказку:
Что касается печати словаря то надо сначала получить 
массив ключей, отсортировать его а затем двигаясь по
отсортированному массиву ключей напечатать словарь.

Проблема у меня в том, что никак не могу разобраться, как создать словарь без использования списка. Очень нужен конкретный пример решения. smile  smile 
PM MAIL Skype Jabber MSN   Вверх
setq
Дата 28.5.2007, 18:10 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Почему ничего не вышло? Не надо создавать словарь. Предположим, он уже есть. Получить массив ключей можно так:

Код

{'a': 3, 'b': 4}.keys()  # -->  ['a', 'b']

  Вверх
Бонифаций
Дата 28.5.2007, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 827
Регистрация: 15.9.2005
Где: Brisbane

Репутация: 1
Всего: 40



значит вместо print dictionary надо сделать вот что:

Код


keyset = dictionary.keys().sort()
for ky in keyset:
   print "Разлюбезнейший препод, вот вам буква %s, а вот значение счетчика : %d" % (ky, dictionary[ky] )





--------------------
 Бонифаций.
 
PM MAIL ICQ Skype GTalk Jabber YIM   Вверх
setq
Дата 28.5.2007, 18:56 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











.sort() ничего не возвращает вроде бы.


Цитата(Бонифаций @  28.5.2007,  18:19 Найти цитируемый пост)
Разлюбезнейший препод, ...
lol

  Вверх
Бонифаций
Дата 28.5.2007, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 827
Регистрация: 15.9.2005
Где: Brisbane

Репутация: 1
Всего: 40



хм не проверял, но по идее должны взяться ключи отсортироваться в временном списке и присвоиться keyset.

Ну если я ошибаюсь тогда конечно
keyset = dictionary.keys()
keyset.sort()


--------------------
 Бонифаций.
 
PM MAIL ICQ Skype GTalk Jabber YIM   Вверх
Paranorma
Дата 31.5.2007, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 102
Регистрация: 1.1.2007

Репутация: 1
Всего: 1



Люди, что же я так бестолкова?
Препод говорит, что после ввода строк должна идти их обработка, а потом уж их ввод в словарь. Я никак не могу это понять... Мне же еще и внутренний цикл потребуется, чтоб, например, буквы "а" складывались только с "а", а "б" - с "б". У меня на данный момент только этот фрагмент в программе
dictionary = {}
Код

while True:
    s = raw_input(">>>")
    if not s:
        break
    len_str = len(s)

И куда дальше двигаться - мне непонятно. 
Сама же распечатка отсортированного словаря будет выглядеть так:
А - 5
С - 2
М - 3
Но с сортировкой я справлюсь. Плиз, помогите с созданием словаря!!!
PM MAIL Skype Jabber MSN   Вверх
Бонифаций
Дата 1.6.2007, 00:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 827
Регистрация: 15.9.2005
Где: Brisbane

Репутация: 1
Всего: 40



уже отвечал же

еще раз
Код

   for litera in s:
      counter = dictionary.get(litera,0)
      counter += 1
      dictionary[litera] = counter



Это сообщение отредактировал(а) Бонифаций - 1.6.2007, 00:13


--------------------
 Бонифаций.
 
PM MAIL ICQ Skype GTalk Jabber YIM   Вверх
PyLearner
Дата 1.6.2007, 01:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 17.5.2007

Репутация: нет
Всего: 1



 Пока до словаря не дошел, но со списком вот что получилось, не пинайте пожалуйста, я всего лишь начинающий вообще в программировании:

Код

def f():
    a=['c','b','d','c','d','e','c','f','c','g']
    c=[]
    for x in range(0,len(a)):
        r=a[x]
        j=x
        b=0
        if r not in c:
            for j in range(j,len(a)):
                if r==a[j]:
                    b=b+1
                    c.append(r)
            print r, b
f()


Это сообщение отредактировал(а) PyLearner - 1.6.2007, 01:17
PM MAIL   Вверх
Paranorma
Дата 2.6.2007, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 102
Регистрация: 1.1.2007

Репутация: 1
Всего: 1



Всем огромное спасибо!
Последний вопрос. Как быть с сортировкой? Поясню, что имеется ввиду. Например, я ввожу такую строку "abracadabra" и распечататься она должна так:
а - 5
b - 2
с - 1
d - 1

Сортировка идет именно по алфавиту.
На данный момент у меня имеется это:
Код

dictionary = {}
while True:
    s = raw_input(">>>")
    if not s:
        break
    for litera in s:
        counter = dictionary.get(litera, 0)
        counter += 1
        dictionary[litera] = counter
keyset = dictionary.keys()
keyset.sort()

print keyset

Тут сортировка ключей, но значения не печатаются.

Можно записать еще и так
Код

dictionary = {}
while True:
    s = raw_input(">>>")
    if not s:
        break
    for litera in s:
        counter = dictionary.get(litera, 0)
        counter += 1
        dictionary[litera] = counter
print dictionary

Тут печатаются и ключи, и значения, но никакой сортировки.
Как добиться того результата, о котором я выше писала?

PM MAIL Skype Jabber MSN   Вверх
Бонифаций
Дата 3.6.2007, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 827
Регистрация: 15.9.2005
Где: Brisbane

Репутация: 1
Всего: 40



вы что издеваетесь чтоли? Тoже уже писал:

Код

keyset = dictionary.keys()
keyset.sort()
for ky in keyset:
   print "%s -  %d" % (ky, dictionary[ky] )



--------------------
 Бонифаций.
 
PM MAIL ICQ Skype GTalk Jabber YIM   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0558 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.