Найти - Пользователи
Полная версия: Помогите с программой
Начало » Python для новичков » Помогите с программой
1 2 3 4 5 6
Oleg1975Spb
Есть словарь. Нужно ввести текст с клавиатуры. После ввода текста нужно сгруппировать буквы текста в списки однородных цифр и вывести на экран эти списки. Мне непонятно то, как значение буквы в словаре, например, 12, поместить в списки единиц и двоек и как эту процедуру исполнить к всему введённому тексту.

dict= {' ‘: ’ ‘,’а': ‘ 1’, ‘б’: ‘ 2’, ‘в’: ‘ 25’,'г': ‘ 33’, ‘д’: ‘ 12’}
a = list(map(str, input(“Введите текст: ”)))

Требуемый результат:
Введите текст: абвгд
Столбцы:
11
222
33
5
doza_and
Oleg1975Spb
Есть словарь.
Oleg1975Spb
сгруппировать буквы текста в списки однородных цифр
Мне непонятно зачем вам словарь?
Мне непонятно какие цифры вы называете однородными?
Oleg1975Spb
как значение буквы в словаре, например, 12
Мне непонятно почему вы число 12 называете буквой. Оно не буква.
Oleg1975Spb
и как эту процедуру исполнить к всему введённому тексту
В питоне вообще нет процедур. Есть функции. Но у вас нет ни одной функции. Может вам про них почитать?

Может такой код вам поможет?
 a = [[] for i in range(10)]
for c in text:
   try:
     a[int(c)].append(c)
   except:
     pass
print(a)

p.s.
Если это учебная задача то условие надо приводить дословно, потому что после вольного упрощенного перевода становится невозможно понять что хотели составители.
py.user.next
Oleg1975Spb
Есть словарь. Нужно ввести текст с клавиатуры. После ввода текста нужно сгруппировать буквы текста в списки однородных цифр и вывести на экран эти списки.
Повезло тебе, что я в детстве прошёл толстенную книжку с головоломками из СССР
  
>>> def f():
...     dct = {'а': '1', 'б': '2', 'в': '25','г': '33', 'д': '12'}
...     text = input('Введите текст: ')
...     out = [''] * 10
...     for ch in text:
...         for digit in dct[ch]:
...             value = out[int(digit)]
...             out[int(digit)] = value + digit
...     for i in out:
...         if i:
...             print(i)
... 
>>> f()
Введите текст: абвгд
11
222
33
5
>>>
Ocean
py.user.next
приветствую
а что за книжка с головоломками?)

У меня дурацкий вопрос: а почему в решении так out = * 10?


Oleg1975Spb
У меня не такое изящное и короткое решение получилось, как у уважаемого py.user.next ))

  
def setup_dict(keys, dict):
    """Создает новый словарь на основе заданного, используя ключи введенные пользователем"""
    new_dict = {}
    for key in keys:
        new_dict[key] = dict[key]
    return new_dict
def create_sorted_values(dict):
    """Очищает значения словаря от пробелов, строки конвертирует в списки цифр"""
    value_list = []
    for item in list(dict.values()):
        for sign in list(item):
            if sign != ' ':
                value_list.append(sign)
    sorted_values = sorted(value_list)
    return sorted_values
def main():
    dict = {' ': ' ',
            'а': ' 1',
            'б': ' 2',
            'в': ' 25',
            'г': ' 33',
            'д': ' 12'}
    a = list(map(str, input("Введите текст: ")))
    given_dict = setup_dict(a, dict)
    value_list = create_sorted_values(given_dict)
    # Выводит на печать строки одинаковых символов
    for id in range(len(value_list)-1):
        if value_list[id+1] == value_list[id]:
            print(value_list[id], end='')
        else:
            print(value_list[id])
    print(value_list[len(value_list)-1])
if __name__ == '__main__':
	main()
py.user.next
Ocean
а что за книжка с головоломками?)
“Твоё свободное время”. Там прикольные задачи, не Мурзилка ни разу и не Весёлые картинки. Некоторые задачи по несколько месяцев решить не мог. Давно это было. Они были интересные, но решать это их никак не помогало.

Ocean
У меня дурацкий вопрос: а почему в решении так
  
out = [''] * 10
?
Потому что он разбирает цифры, а их десять всего - 0 1 2 3 4 5 6 7 8 9. Соответственно, мы можем использовать индексы массива (ну, списка в данном случае, массивы - в языке C, этот приём оттуда) для поиска ячейки, куда сохраняем поступающие данные - очередную цифру.
Что будет, если умножить в Python список на число? Операция умножения в питоне полиморфная, поэтому для чисел она работает как умножение, для строк - как повторение, а для списков - как повторение списка без глубокого копирования элементов. Операция одна, а для разных типов она работает абсолютно по-разному. Так как строки являются немутабельными объектами в Python, об их копировании можно не заботиться, они всё равно всегда заново создаются или берутся из кеша.
  
>>> [''] * 10
['', '', '', '', '', '', '', '', '', '']
>>>
  
>>> lst = [''] * 10
>>> lst
['', '', '', '', '', '', '', '', '', '']
>>> id(lst[0]), id(lst[1])
(140583817108144, 140583817108144)
>>>
>>> s = ''
>>> id(s)
140583817108144
>>>
Видишь, это одна и та же строка, которая берётся из кеша, чтобы её заново не генерировать, не выделять память для неё, не сохранять её по новому адресу и так далее.
Дальше при получении цифры 1, например, мы берём элемент списка с таким же индексом, там находится пустая строка, и мы к этой пустой строке прибавляем цифру один в строковом виде и сохраняем этот результат обратно в список уже вместо пустой строки. В следующий раз при получении цифры 1, мы берём элемент списка с таким же индексом, там находится строка с цифрой 1, и мы к этой строке с цифрой 1 прибавляем цифру один в строковом виде и сохраняем этот результат обратно в список уже вместо строки с цифрой 1. Так мы получаем строку с цифрами 11 по индексу 1 в списке со строками. И так для каждой цифры работает. Мы применили сишный приём.
В языке C работа с индексами в массиве идёт очень плотно, там массивы делались такими специально. Там старались всё со всем соединить, поэтому он такой компактный и может всё. И Python тоже компактный потому, что изначально это закос под C, только с продолжением. В других языках это всё сразу видно: что в питоне всё, как в C, так же всё соединено со всем; а в других языках нихера не соединено и приходится писать по многу-многу строк, потому что вот так вложить что-нибудь куда-нибудь не получается.
Ocean
py.user.next
Потому что он разбирает цифры, а их десять всего - 0 1 2 3 4 5 6 7 8 9. Соответственно, мы можем использовать индексы массива (ну, списка в данном случае, массивы - в языке C, этот приём оттуда) для поиска ячейки, куда сохраняем поступающие данные - очередную цифру.
Поняла теперь!) Спасибо
Офигенное решение, я сейчас сижу его разбираю

У меня сразу возникла идея сортировать встречающиеся символы по отдельным “коробочкам”, думала через словарь сделать, но не сообразила как решение сделать универсальным.
Не прокачала мысль, что цифр то всего 10)

py.user.next
Дальше при получении цифры 1, например, мы берём элемент списка с таким же индексом, там находится пустая строка, и мы к этой пустой строке прибавляем цифру один в строковом виде и сохраняем этот результат обратно в список уже вместо пустой строки. В следующий раз при получении цифры 1, мы берём элемент списка с таким же индексом, там находится строка с цифрой 1, и мы к этой строке с цифрой 1 прибавляем цифру один в строковом виде и сохраняем этот результат обратно в список уже вместо строки с цифрой 1. Так мы получаем строку с цифрами 11 по индексу 1 в списке со строками. И так для каждой цифры работает. Мы применили сишный приём. В языке C работа с индексами в массиве идёт очень плотно, там массивы делались такими специально.
Да, это очень круто!
Я похожее пыталась сколхозить обработав список значений исходного словаря через enumerate, но не додумалась, что стоит добавить и пустые элементы для отсутствующих в исходных данных цифр.

Спасибо огромное, очень полезный прием! Утащила себе в конспект)

py.user.next
“Твоё свободное время”. Там прикольные задачи, не Мурзилка ни разу и не Весёлые картинки. Некоторые задачи по несколько месяцев решить не мог. Давно это было. Они были интересные, но решать это их никак не помогало.

Кажется нашла)
Обложка такая была? )
py.user.next
Ocean
Обложка такая была? )
Да она одна во Вселенной. Можешь скачать её во ВКонтакте. В Яндексе 100500 ссылок на pdf. Попробуй там какое-нибудь задание сделать про Докшина и Скобелёва или там откуда приехали мальчики на пикник и какое там число у них. Короче, не фуфло типа олимпиадных задачек сегодняшних.



Всё, вперёд и с песней.
Ocean
py.user.next
спасибо! скачала )

Порешала)

Корнеев не пекарь, так как ездит на работу, а пекарь ходит пешком
Докшин не пекарь, так как ездит на работу, а пекарь ходит пешком
Пекарь или Мареев, или Скобелев
Докшин не может быть милиционером, потому что в этом случае Корнеев не может быть врачом (живет рядом), инженером (знаком с Докшиным), пекарем (ездит на работу, а не ходит пешком).
Корнеев не может быть милиционером, потому что тогда Докшин не может быть врачем(живет рядом), пекарем (ездит, а не ходит пешком), инженером (хорошо знакомы)
Следовательно, Корнеев и Докшин - могут быть только врачом и инженером
Так как пара Корнеев и Докшин - это врач и инженер, Мареев не может быть милиционером потому что милиционер старше врача и инженера, но Мареев младше Докшина
Следовательно, милиционер - Скобелев
Если Скобелев милиционер, то Мареев - пекарь
Так как Корнеев и Скобелев знакомы, то Корнеев не может быть инженером, он врач
Так как Корнеев врач, то Докшин - инженер
Итого: Корнеев - врач, Докшин - инженер, Мареев - пекарь, Скобелев - милиционер

py.user.next, а что там за вторая задачка была про пикник?) Эт примерно на какой странице книги? Не могу найти
AD0DE412
чет не могу это представить математически

 	соседи	ездит	
к	1	1	и в
д	1	1	и в
м			м п
с			м п
			
	играют	ездит	
к	1		в
д			и
м			п
с	1		м

ну и ладно потом мбыть

Ocean
AD0DE412
математически можно через матрицу “принятых решений”

вот пошагово ее заполнила с примечаниями


Картинка здесь
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB