Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 20, 2021 14:50:54

Oleg1975Spb
Зарегистрирован: 2021-06-20
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с программой

Есть словарь. Нужно ввести текст с клавиатуры. После ввода текста нужно сгруппировать буквы текста в списки однородных цифр и вывести на экран эти списки. Мне непонятно то, как значение буквы в словаре, например, 12, поместить в списки единиц и двоек и как эту процедуру исполнить к всему введённому тексту.

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

Требуемый результат:
Введите текст: абвгд
Столбцы:
11
222
33
5

Отредактировано Oleg1975Spb (Июнь 20, 2021 14:52:02)

Прикреплённый файлы:
attachment Tekstik1.py (175 байт)

Офлайн

#2 Июнь 20, 2021 18:34:37

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Помогите с программой

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.
Если это учебная задача то условие надо приводить дословно, потому что после вольного упрощенного перевода становится невозможно понять что хотели составители.



Офлайн

#3 Июнь 21, 2021 00:10:26

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9874
Репутация: +  854  -
Профиль   Отправить e-mail  

Помогите с программой

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
>>>



Отредактировано py.user.next (Июнь 21, 2021 00:12:03)

Офлайн

#4 Июнь 21, 2021 00:51:40

Ocean
Зарегистрирован: 2021-03-14
Сообщения: 131
Репутация: +  9  -
Профиль   Отправить e-mail  

Помогите с программой

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()

Офлайн

#5 Июнь 21, 2021 01:26:01

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9874
Репутация: +  854  -
Профиль   Отправить e-mail  

Помогите с программой

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, так же всё соединено со всем; а в других языках нихера не соединено и приходится писать по многу-многу строк, потому что вот так вложить что-нибудь куда-нибудь не получается.



Отредактировано py.user.next (Июнь 21, 2021 01:35:47)

Офлайн

#6 Июнь 21, 2021 01:52:37

Ocean
Зарегистрирован: 2021-03-14
Сообщения: 131
Репутация: +  9  -
Профиль   Отправить e-mail  

Помогите с программой

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
“Твоё свободное время”. Там прикольные задачи, не Мурзилка ни разу и не Весёлые картинки. Некоторые задачи по несколько месяцев решить не мог. Давно это было. Они были интересные, но решать это их никак не помогало.

Кажется нашла)
Обложка такая была? )

Прикреплённый файлы:
attachment golovolomki.jpg (86,4 KБ)

Офлайн

#7 Июнь 21, 2021 03:39:49

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9874
Репутация: +  854  -
Профиль   Отправить e-mail  

Помогите с программой

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



Всё, вперёд и с песней.



Отредактировано py.user.next (Июнь 21, 2021 03:42:08)

Прикреплённый файлы:
attachment tsv_profi.jpg (55,6 KБ)

Офлайн

#8 Июнь 21, 2021 04:01:21

Ocean
Зарегистрирован: 2021-03-14
Сообщения: 131
Репутация: +  9  -
Профиль   Отправить e-mail  

Помогите с программой

py.user.next
спасибо! скачала )

Порешала)

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

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

Отредактировано Ocean (Июнь 21, 2021 09:39:58)

Офлайн

#9 Июнь 21, 2021 10:51:08

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

Помогите с программой

чет не могу это представить математически

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

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



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Отредактировано AD0DE412 (Июнь 21, 2021 10:51:56)

Офлайн

#10 Июнь 21, 2021 13:46:19

Ocean
Зарегистрирован: 2021-03-14
Сообщения: 131
Репутация: +  9  -
Профиль   Отправить e-mail  

Помогите с программой

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

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


Картинка здесь

Отредактировано Ocean (Июнь 21, 2021 13:47:03)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version