Напишите программу которая анализирует текст на основе словаря содержащий вопрос о номере телефона

0 / 0 / 0

Регистрация: 10.11.2019

Сообщений: 70

1

Написать прогрм, которая анализирует текст на основе словаря

18.04.2022, 01:27. Показов 1781. Ответов 2


написать прогрм, которая анализирует текст на основе словаря

Миниатюры

Написать прогрм, которая анализирует текст на основе словаря
 

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

18.04.2022, 01:27

2

0 / 0 / 0

Регистрация: 10.11.2019

Сообщений: 70

18.04.2022, 15:29

 [ТС]

2

ыот



0



Пифагор

2165 / 1650 / 838

Регистрация: 10.01.2015

Сообщений: 5,184

18.04.2022, 16:14

3

Лучший ответ Сообщение было отмечено lgl7 как решение

Решение

Python
1
2
3
4
5
6
7
8
9
10
11
d = {...} #Города и население
n = int(input('Численность: '))
res = str()
 
if n > 1_000_000:
    res = 'Крупнейший'
elif 250_000 < n <= 1_000_000:
    res = 'Крупный'
    
# и тд
print(res)

Добавлено через 17 минут

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
d = {...} #город: население(int)
 
town = input()
res = str()
 
if town not in d.keys():
    print('Такого города нет')
else:
    n = d[town]
    
if n > 1_000_000:
    res = 'Крупнейший'
elif 250_000 < n <= 1_000_000:
    res = 'Крупный'
# и тд
 
print(res)



1



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

18.04.2022, 16:14

Помогаю со студенческими работами здесь

Написать программу, которая анализирует данные о возрасте и относит человека к одной из четырех групп
Задание: Написать программу, которая анализирует данные о возрасте и относит человека к одной из…

Написать программу, которая анализирует данные о возрасте и относит человека к одной из четырех групп
3. Написать программу, которая анализирует данные о возрасте и относит человека к одной из четырех…

Написать программу,которая анализирует командную строку для запуска программы и выводит сообщение об ошибке
Написать программу,которая анализирует командную строку для запуска программы и выводит сообщение…

Составить программу, которая анализирует предложение-текст, заканчивающийся символом «.»
Составить программу, которая анализирует предложение-текст, заканчивающийся символом &quot;.&quot;, и для…

Написать и протестировать функцию NXT_BLNK(str, pos), которая анализирует строку str
Написать и протестировать функцию NXT_BLNK(str, pos), которая анализирует строку str, начиная с…

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

3

Система проверки сайта не принимает решение, пожалуйста подскажите где ошибка.

Собственно задача:

1002.Телефонные номера

Ограничение времени: 2.0 секунды
Ограничение памяти: 64 МБ

В современном мире вы встречаетесь с огромным количеством телефонных номеров,
которые со временем становятся всё длиннее и длиннее. И вам приходится
запоминать эти номера. Одним из простых способов запоминания является сопоставление
букв каждой цифре, как показано на следующем рисунке:

1 ij    2 abc   3 def
4 gh    5 kl    6 mn
7 prs   8 tuv   9 wxy
        0 oqz

Таким образом, каждому слову или группе слов может быть сопоставлен уникальный номер,
так что можно запоминать слова вместо телефонных номеров. Очевидно, есть особый шарм в том,
чтобы найти простую взаимосвязь между словом, используемым для запоминания телефонного номера,
и владельцем этого номера. Так, телефонный номер 941837296 вашего друга, играющего в шахматы,
может быть прочитан как WHITEPAWN (белая пешка), а номер 2855304 Вашего любимого учителя
может быть прочитан как BULLDOG (бульдог).

Напишите программу, находящую самую короткую последовательность слов
(имеющую наименьшее количество слов), которая соответствует заданному номеру телефона и
заданному списку слов. Соответствие описано на рисунке выше.

Исходные данные

Ввод состоит из набора тестов. Первая строка каждого теста содержит номер телефона,
к которому нужно подобрать мнемонику. Номер состоит не более чем из 100 цифр.
Вторая строка содержит общее количество слов в словаре (максимум 50 000).
Каждая из оставшихся строк содержит одно слово,
состоящее не более чем из 50 строчных латинских букв.
Общий размер ввода не превосходит 300 килобайт.
Последняя строка ввода содержит число −1.

Результат

Каждая строка вывода должна содержать кратчайшую последовательность слов, найденную вашей программой.
Слова должны быть разделены одиночными пробелами. Если для входных данных нет решения, соответствующая
строка вывода должна содержать текст No solution..
Если существует несколько решений, имеющих одинаковое количество слов, можете выбрать любое из них.


Ввод и вывод данные авторами для примера:

7325189087
5
it
your
reality
real
our
4294967296
5
it
your
reality
real
our
-1
# Ожидаемый результат  
reality our
No solution.

Мои вводные для теста:

2272583262772
11
ba
ra
ku
k
ss
u
ma
da
m
a
ssa
-1

По логике ответ должен быть

ba ra ku da ma ssa

Но это решение почему-то в список возможных не попадает.
Причем если ma расположить после da то это решение находится.
Вот список решений из которых идет выбор оптимального:

['ba', 'ra', 'ku', 'da', 'm', 'a', 'ss', 'a']
['a', 'a', 'ra', 'ku', 'da', 'm', 'a', 'ss', 'a']

И соответственно оптимальным код считает:

ba ra ku da m a ss a

Ну и соответственно валидатор не принимает это решение.
Подскажите пожалуйста где косяк

Мое решение:

keyboard = {'1': 'ij', '2': 'abc', '3': 'def',
            '4': 'gh', '5': 'kl', '6': 'mn',
            '7': 'prs', '8': 'tuv', '9': 'wxy',
            '0': 'oqz'}

while True:
    phone_num = input()
    solutions = []
    if phone_num == '-1':
        break
    phone_len = len(phone_num)
    words = [input() for _ in range(int(input()))]
    collector = []
    for word in words:
        if len(word) > phone_len:
            continue

        solution = []
        for i in range(len(word)):
            if word[i] not in keyboard[phone_num[i]]:
                break

        else:
            solution.append(word)
            test_solution = []

            while test_solution != solution:
                test_solution = solution.copy()
                raw_solution = ''.join(solution)
                len_solution = len(raw_solution)
                new_words = [item for item in words if len(item) <= phone_len - len_solution]
                if new_words:
                    for item in new_words:
                        raw_solution = ''.join(solution)
                        len_solution = len(raw_solution)
                        test_string = raw_solution + item
                        len_test_string = len(test_string)
                        if len_test_string > phone_len:
                            continue
                        for s in range(len_solution, len_test_string):
                            if test_string[s] not in keyboard[phone_num[s]]:
                                break
                        else:
                            solution.append(item)

            solutions.append(solution)

    if solutions:
        solutions.sort(key=lambda g: len(g))
        print(*solutions[0])
    else:
        print('No solution.')

DOMAINS /* раздел описания доменов */
 
name, number = String /* фамилию абонента и телефонный
 
                         номер будем хранить в виде
 
                         строк */
 
file=f /* файловый домен будем использовать для
 
          считывания с диска и записи на диск нашей
 
          телефонной базы */
 
DATABASE /* раздел описания предикатов внутренней
 
            базы данных */
 
phone(name, number)
 
PREDICATES /* раздел описания предикатов */
 
name_phone(name, number) /* этот предикат находит номер
 
                            телефона по фамилии абонента */
 
phone_name(name, number) /* этот предикат находит фамилию
 
                            абонента по номеру телефона */
 
m(char) /* этот предикат реализует выполнение
 
           соответствующего пункта меню */
 
menu /* этот предикат реализует вывод меню и
 
        обработку выбора пользователя */
 
start /* этот предикат проверяет наличие файла
 
         с телефонной базой на диске и либо загружает
 
         факты из нее во внутреннюю базу данных,
 
         если такой файл существует, либо создает
 
         этот файл, если его не было */
 
CLAUSES /* раздел описания предложений */
 
name_phone(Name,Phone):–
 
                   phone(Name,Phone),!.
 
name_phone(_,"Нет информации о телефонном номере").
 
                /* если        соответствующего факта
 
                   во внутренней базе данных не нашлось,
 
                   вместо телефонного номера возвращаем
 
                   соответствующее сообщение */
 
phone_name(Name,Phone):–
 
                      phone(Name,Phone).
 
phone_name("Нет информации о владельце телефона",_).
 
                /* если соответствующего факта
 
                   во внутренней базе данных не нашлось,
 
                   вместо фамилии абонента возвращаем
 
                   соответствующее сообщение */
 
menu:–
 
     clearwindow, /* очистка текущего окна */
 
     write("1– Получение телефонного номера
 
     по фамилии "),nl,
 
     write("2 — Получение фамилии абонента по номеру
 
     телефона "),nl,
 
     write("3 — Добавление новой записи в телефонную
 
     базу."),nl,
 
     write("4 — Изменение номера абонента"),nl,
 
     write("5 — Удаление записи из телефонной базы"),nl,
 
     write("0 — Выйти"),nl,
 
     readchar(C), /* читаем символ с клавиатуры */
 
m(C). /* вызываем выполнение соответствующего пункта
 
         меню */
 
m('1'):–
 
       clearwindow,
 
       write("Введите фамлию"), nl,
 
       readln(Name),
 
       name_phone(Name, Phone),
 
       write("Номер телефона: ",Phone),
 
       readchar(_),
 
menu.
 
m('2'):–
 
       clearwindow,
 
       write("Введите номер телефона"),nl,
 
       readln(Phone),
 
       phone_name(Name, Phone),
 
       write("Фамилия абонента: ",Name),
 
       readchar(_),
 
       menu.
 
m('3'):–
 
       clearwindow,
 
       write("Введите фамилию"),nl,
 
       readln(Name),
 
       write("Введите номер телефона"),nl,
 
       readln(Phone),
 
       assert(phone(Name,Phone)),
 
                         /* добавляем факт во внутреннюю
 
                            базу данных */
 
       menu.
 
m('4'):–
 
       clearwindow,
 
       write("Введите фамилию"),nl,
 
       readln(Name),
 
       write("Введите новый номер телефона"),nl,
 
       readln(Phone),
 
       retract(phone(Name,_)),
 
                          /* удаляем устаревшую информацию
 
                             из внутренней базы данных */
 
       assert(phone(Name,Phone)),
 
                          /* добавляем новую информацию
 
                             в телефонную базу */
 
       menu.
 
m('5'):–
 
       clearwindow,
 
       write("Укажите номер телефона, запись о котором
 
       нужно удалить из телефонной базы"), nl,
 
       readln(Phone),
 
       retract(phone(_,Phone)), /* удаляем соответствующий
 
                                   факт из внутренней базы
 
                                   данных */
 
       menu.
 
m('0'):–
 
save("phones.ddb "), /* сохраняем телефонную базу
 
                        в файл */
 
retractall(_)./* удаляем все факты из внутренней
 
                 базы данных */
 
m(_):–
 
       menu. /* если пользователь по ошибке нажал клавишу,
 
                отличную от тех, реакция на которые
 
                предусмотрена, ничего плохого
 
                не произойдет, будет отображено меню
 
                еще раз */
 
start:–
 
       existfile("phones.ddb"),!, /* если файл с телефонной
 
                                     базой существует */
 
       consult("phones.ddb "), /* загружаем факты во
 
                                  внутреннюю базу данных */
 
       menu. /* вызываем меню */
 
start:–
 
       openwrite(f,"phones.ddb"),
 
                          /* если файла с телефонной
 
                             базой не существует, создаем
 
                             его */
 
       closefile(f),
 
       menu. /* вызываем меню */
 
GOAL /* раздел внутренней цели*/
 
Start

Задача: написать программу, которая принимает текст и выводит два слова: наиболее часто встречающееся и самое длинное.

TEXT = """Однажды, в студёную зимнюю пору
Я из лесу вышел; был сильный мороз.
Гляжу, поднимается медленно в гору
Лошадка, везущая хворосту воз.
И, шествуя важно, в спокойствии чинном,
Лошадку ведёт под уздцы мужичок
В больших сапогах, в полушубке овчинном,
В больших рукавицах... а сам с ноготок!
«Здорово, парнище!» — «Ступай себе мимо!» —
«Уж больно ты грозен, как я погляжу!
Откуда дровишки?» — «Из лесу, вестимо,
Отец, слышишь, рубит, а я отвожу».
(В лесу раздавался топор дровосека.) —
«А что, у отца-то большая семья?» —
«Семья-то большая, да два человека
Всего мужиков-то: отец мой да я...» —
«Так вон оно что! А как звать тебя?» — «Власом». —
«А кой тебе годик?» — «Шестой миновал...
Ну, мёртвая!» — крикнул малюточка басом,
Рванул под уздцы и быстрей зашагал...
На эту картину так солнце светило,
Ребёнок был так уморительно мал,
Как будто всё это картонное было,
Как будто бы в детский театр я попал.
Но мальчик был мальчик живой, настоящий,
И дровни, и хворост, и пегонький конь,
И снег до окошек деревни лежащий,
И зимнего солнца холодный огонь —
Всё, всё настоящее русское было,
С клеймом нелюдимой, мертвящей зимы,
Что русской душе так мучительно мило,
Что русские мысли вселяет в умы, —
Те честные мысли, которым нет доли,
Которым нет смерти —
В которых так много и злобы и боли,
В которых так много любви!"""

Мы вставили текст прямо в программу, записав ее в переменную TEXT при помощи оператора присваивания =.
Поскольку переменную с текстом изменять не планируется, ее следует считать константой и записывать название заглавными буквами.
При работе с большими объемами текстовой информации текст загружается из отдельного файла.
Встроенная функция open() по умолчанию открывает файл по указанному имени и пути к нему в режиме чтения.
Функция возвращает объект типа file, у которого есть методы open() и close().
При возникновении проблем с кодировкой ее можно указать при открытии файла.

txtfile = open("warandpeace.txt", encoding="utf-8")
TEXT = txtfile.read()
txtfile.close()

В третьей версии языка подобная операция делается с использованием ключевых слов with и as:

with open("warandpeace.txt", encoding="utf-8") as txtfile:
    TEXT = txtfile.read()

Количество слов легко подсчитать при помощи метода split().
Количество символов – длина строки, полученной при сложении всех слов.

words = TEXT.split()
print(len(words)) # Вывести на экран количество слов
print(len("".join(words))) # Вывести на экран количество символов
wordsdict = {}
for word in words:
    word = word.lower().strip('"').strip("(").strip("!").strip("«").rstrip("...»").strip(",")
    if word not in wordsdict:
        wordsdict[word] = 1
    else:
        wordsdict[word] = wordsdict[word] + 1

wordslist = sorted(wordsdict.items(), key=lambda x: x[1], reverse=True)
print(wordslist)

longest = ""
wordsfreq = []
for word in wordsdict:
    wordsfreq.append((word, wordsdict[word]))
    if len(word) > len(longest):
        longest = word

wordsfreq.sort(key=lambda row: row[1], reverse=True)
print(wordsfreq == wordslist)

dct = {}
for word in wordsfreq:
    dct.update({word[0]: word[1]})
print(dct)

Медианное среднее

import statistics as st

TEXT = """Здесь текст для анализа.
Add text here.
"""

word_lens = []
for word in TEXT.split():
    word_lens.append(len(word))

median_val = st.median(word_lens)
mean_val = st.mean(word_lens)
print("Медианное среднее:", median_val, "Среднее:", mean_val, "Разница:", median_val - mean_val)

Ссылки

  • Закон Ципфа
    – эмпирическая закономерность распределения частоты слов естественного языка: если все слова языка (или просто достаточно длинного текста) упорядочить по убыванию частоты их использования, то частота n-го слова в таком списке окажется приблизительно обратно пропорциональной его порядковому номеру n.
  • Анализ текста онлайн
  • Текстовая обработка в языке Python
  • Regexp и Python: извлечение токенов из текста
  • Обработка текста
  • NLP – это весело! Обработка естественного языка на Python
  • Библиотека textwrap

Содержание

  1. Введение
  2. I like Python
  3. Управляемый разделитель
  4. Сумма трёх чисел
  5. Следующее и предыдущее
  6. Разделяй и властвуй
  7. Расстояние в метрах
  8. Сама неотвратимость
  9. Пересчет временного интервала
  10. Трехзначное число
  11. Четырёхзначное число
  12. Пароль
  13. Четное или нечетное?
  14. Роскомнадзор
  15. Арифметическая прогрессия
  16. Наименьшее из четырёх чисел
  17. Только +
  18. Принадлежность 1
  19. Принадлежность 2
  20. Принадлежность 3
  21. Високосный год
  22. Ход ладьи
  23. Ход короля
  24. Вид треугольника
  25. Самописный калькулятор
  26. Цветовой микшер
  27. Пересечение отрезков

Введение

При изучении любого языка программирования очень важно много практиковаться. В этом уроке Вы найдёте различные задачи, которые помогут Вам развить алгоритмическое мышление.

I like Python

Напишите программу, которая выводит на экран текст «I***like***Python» (без кавычек).


print ("I", "like", "Python", sep="***")

# Вывод:

I***like***Python

Управляемый разделитель

Напишите программу, которая считывает строку-разделитель и три строки, а затем выводит указанные строки через разделитель.


a=input()

b=input()

c=input()

d=input()

print (b, c, d, sep=a)

# Вывод:

***

1

2

3

1***2***3

Сумма трёх чисел

Напишите программу, которая считывает три целых числа и выводит на экран их сумму. Каждое число записано в отдельной строке.


a = int(input())
a += int(input())
a += int(input())
print(a)
# Вывод:

1

2

3

6

Следующее и предыдущее

Напишите программу, которая считывает целое число, после чего на экран выводится следующее и предыдущее целое число с пояснительным текстом.


a = int(input())
print('Следующее за числом', a, 'число:', a+1)
print('Для числа', a, 'предыдущее число:', a-1)
# Вывод:

10

Следующее за числом 10 число: 11

Для числа 10 предыдущее число: 9

Разделяй и властвуй

Напишите программу, которая считывает целое положительное число xx и выводит на экран последовательность чисел x, 2x, 3x, 4x, 5x, разделённых тремя черточками.


a = int(input())
print(a, a*2, a*3, a*4, a*5, sep='-'*3)
# Вывод:

10

10---20---30---40---50

Расстояние в метрах

Напишите программу, которая находит полное число метров по заданному числу сантиметров.


a = int(input())
print(a//100)
# Вывод:

1050

10

Сама неотвратимость

Безумный титан Танос собрал все 6 камней бесконечности и намеревается уничтожить половину населения Вселенной по щелчку пальцев. При этом если население Вселенной является нечетным числом, то титан проявит милосердие и округлит количество выживших в большую сторону. Помогите Мстителям подсчитать количество выживших.


a = int(input())
print(a // 2 + a % 2)
# Вывод:

1015

508

Пересчет временного интервала

Напишите программу для пересчёта величины временного интервала, заданного в минутах, в величину, выраженную в часах и минутах.


a = int(input())
print(a, 'мин - это', a // 60, 'час', a % 60, 'минут.')
# Вывод:

90

90 мин - это 1 час 30 минут.

Трехзначное число

Напишите программу, в которой рассчитывается сумма и произведение цифр положительного трёхзначного числа.


a = int(input())
a1 = a // 100
a2 = a % 100 // 10
a3 = a % 10
print('Сумма цифр =', a1 + a2 + a3)
print('Произведение цифр =', a1 * a2 * a3)
# Вывод:

132

Сумма цифр = 6

Произведение цифр = 6

Альтернативное решение:


a = str(input())
print('Сумма цифр =', int(a[0]) + int(a[1]) + int(a[2]))
print('Произведение цифр =', int(a[0]) * int(a[1]) * int(a[2]))
# Вывод:

132

Сумма цифр = 6

Произведение цифр = 6

Четырёхзначное число

Напишите программу для нахождения цифр четырёхзначного числа.


a = int(input())
print("Цифра в позиции тысяч равна", a // 1000)
print("Цифра в позиции сотен равна", a % 1000 // 100)
print("Цифра в позиции десятков равна", a % 100 // 10)
print("Цифра в позиции единиц равна", a % 10)
# Вывод:

1234

Цифра в позиции тысяч равна 1

Цифра в позиции сотен равна 2

Цифра в позиции десятков равна 3

Цифра в позиции единиц равна 4

Пароль

При регистрации на сайтах требуется вводить пароль дважды. Это сделано для безопасности, поскольку такой подход уменьшает возможность неверного ввода пароля.

Напишите программу, которая сравнивает пароль и его подтверждение. Если они совпадают, то программа выводит: «Пароль принят», иначе: «Пароль не принят».


a = (input())
b = (input())
print('Пароль принят') if a == b else print('Пароль не принят')
# Вывод:

123456

123456

Пароль принят

Четное или нечетное?

Напишите программу, которая определяет, является число четным или нечетным.


a = int(input())
print('Нечетное') if a % 2 else print('Четное')
# Вывод:

50

Четное

Роскомнадзор

Напишите программу, которая определяет, разрешен пользователю доступ к интернет-ресурсу или нет.

Формат входных данных
На вход программе подаётся целое число — возраст пользователя.

Формат выходных данных
Программа должна вывести текст «Доступ разрешен» если возраст не менее 18, и «Доступ запрещен» в противном случае.


a = int(input())
print('Доступ разрешен') if a >= 18 else print('Доступ запрещен')
# Вывод:

19

Доступ разрешен

Арифметическая прогрессия

Напишите программу, которая определяет, являются ли три заданных числа (в указанном порядке) последовательными членами арифметической прогрессии.


a1 = int(input())
a2 = int(input())
a3 = int(input())
if a3 - a2 == a2 - a1:
    print('YES')
else:
    print('NO')
# Вывод:
1
2
3
YES


Наименьшее из четырёх чисел

Напишите программу, которая определяет наименьшее из четырёх чисел.


a, b, c, d = int(input()), int(input()), int(input()), int(input())
if a > b:
    a = b
if c > d:
    c = d
if a > c:
    a = c
print(a)
# Вывод:
1
2
3
4
1


Альтернативное решение:


a1 = int(input())
a2 = int(input())
a3 = int(input())
a4 = int(input())
print(min(a1, a2, a3, a4))
# Вывод:

1

2

3

4

1

Только +

Напишите программу, которая считывает три числа и подсчитывает сумму только положительных чисел.


a = list()
a.append(int(input()))
a.append(int(input()))
a.append(int(input()))
s = 0
for i in a:

    if i >= 0:
        s += i
print(s)
# Вывод:
1
2
-3
3

Альтернативное решение:


a, b, c = int(input()), int(input()), int(input())
print((a if a > 0 else 0) + (b if b > 0 else 0) + (c if c > 0 else 0))
# Вывод:

-2

-3

5

5

Принадлежность 1

Напишите программу, которая принимает целое число x и определяет, принадлежит ли данное число промежутку от -1 до 17.


a1 = int(input())
if a1 > -1 and a1 < 17:
    print('Принадлежит')
else:
    print('Не принадлежит')
# Вывод:
10
Принадлежит

Принадлежность 2

Напишите программу, которая принимает целое число x и определяет, принадлежит ли данное число указанным промежуткам: от минус бесконечности до -3 и от 7 до бесконечности.


a1 = int(input())
print('Принадлежит') if (a1 <= -3 or a1 >= 7) else print('Не принадлежит')
# Вывод:

10

Принадлежит

Принадлежность 3

Напишите программу, которая принимает целое число x и определяет, принадлежит ли данное число указанным промежуткам: от -30 до -2 и от 7 до 25.


x = int(input())
print('Принадлежит') if (x > -30 and x <= -2) or (x > 7 and x <= 25) else print('Не принадлежит')
# Вывод:

10

Принадлежит

Високосный год

Напишите программу, которая определяет, является ли год с данным номером високосным. Если год является високосным, то выведите «YES», иначе выведите «NO». Год является високосным, если его номер кратен 4, но не кратен 100, или если он кратен 400.


a1 = int(input())
print('YES') if ((a1 % 4 == 0) and not (a1 % 100 == 0)) or (a1 % 400 == 0) else print('NO')
# Вывод:

2021

NO

Ход ладьи

Даны две различные клетки шахматной доски. Напишите программу, которая определяет, может ли ладья попасть с первой клетки на вторую одним ходом. Программа получает на вход четыре числа от 1 до 8 каждое, задающие номер столбца и номер строки сначала для первой клетки, потом для второй клетки. Программа должна вывести «YES», если из первой клетки ходом ладьи можно попасть во вторую, или «NO» в противном случае.


a1 = int(input())
a2 = int(input())
a3 = int(input())
a4 = int(input())
print('YES') if (a1 == a3) or (a2 == a4) else print('NO')
# Вывод:

1

1

2

1

YES

Ход короля

Даны две различные клетки шахматной доски. Напишите программу,  которая определяет, может ли король попасть с первой клетки на вторую одним ходом. Программа получает на вход четыре числа от 1 до 8 каждое, задающие номер столбца и номер строки сначала для первой клетки, потом для второй клетки. Программа должна вывести «YES», если из первой клетки ходом короля можно попасть во вторую, или «NO» в противном случае.


a, b, c, d = (int(input()) for i in 'abcd')
if abs(a - c) <= 1 and abs(b - d) <= 1:
    print('YES')
else:
    print('NO')
# Вывод:
1
1
2
2
YES

Вид треугольника

Напишите программу, которая принимает три положительных числа и определяет вид треугольника, длины сторон которого равны введенным числам.


a1 = int(input())
a2 = int(input())
a3 = int(input())
if a1 == a2 == a3:
    print('Равносторонний')
elif a2 == a3 or a1 == a3 or a1 == a2:
    print('Равнобедренный')
else:
    print('Разносторонний')
# Вывод:
1
3
2
Разносторонний

Самописный калькулятор

Напишите программу, которая считывает с клавиатуры два целых числа и строку. Если эта строка является обозначением одной из четырёх математических операций (+, -, *, /), то выведите результат применения этой операции к введённым ранее числам, в противном случае выведите «Неверная операция». Если пользователь захочет поделить на ноль, выведите текст «На ноль делить нельзя!».


a1 = int(input())
a2 = int(input())
a3 = input()

if a3 == '/' and a2 == 0:
    print('На ноль делить нельзя!')
elif a3 == '/':
    print(a1 / a2)
elif a3 == '+':
    print(a1 + a2)
elif a3 == '-':
    print(a1 - a2)
elif a3 == '*':
    print(a1 * a2)
else:
    print('Неверная операция')
# Вывод:
3
6
+
9

Цветовой микшер

Красный, синий и желтый называются основными цветами, потому что их нельзя получить путем смешения других цветов. При смешивании двух основных цветов получается вторичный цвет:

  • если смешать красный и синий, то получится фиолетовый;
  • если смешать красный и желтый, то получится оранжевый;
  • если смешать синий и желтый, то получится зеленый.

Напишите программу, которая считывает названия двух основных цветов для смешивания. Если пользователь вводит что-нибудь помимо названий «красный», «синий» или «желтый», то программа должна вывести сообщение об ошибке. В противном случае программа должна вывести название вторичного цвета, который получится в результате.


a1 = input()
a2 = input()

if a1 == 'красный':
    if a2 == 'красный':
        print('красный')
    elif a2 == 'желтый':
        print('оранжевый')
    elif a2 == 'синий':
        print('фиолетовый')
elif a1 == 'желтый':
    if a2 == 'красный':
        print('оранжевый')
    elif a2 == 'желтый':
        print('желтый')
    elif a2 == 'синий':
        print('зеленый')
elif a1 == 'синий':
    if a2 == 'красный':
        print('фиолетовый')
    elif a2 == 'желтый':
        print('зеленый')
    elif a2 == 'синий':
        print('синий')
if a1 not in ('синий', 'красный', 'желтый') or a2 not in ('синий', 'красный', 'желтый'):
    print('ошибка цвета')
# Вывод:
красный
синий
фиолетовый

Альтернативный вариант:


a, b = input(), input()
if (a == 'красный' and b == 'синий') or (a == 'синий' and b == 'красный'):
    print('фиолетовый')
elif (a == 'красный' and b == 'желтый') or (a == 'желтый' and b == 'красный'):
    print('оранжевый')
elif (a == 'синий' and b == 'желтый') or (a == 'желтый' and b == 'синий'):
    print('зеленый')
else:
    print('ошибка цвета')
# Вывод:
зеленый
оранжевый
ошибка цвета

Пересечение отрезков

На числовой прямой даны два отрезка: [a1​; b1​] и [a2​; b2​]. Напишите программу, которая находит их пересечение.

Пересечением двух отрезков может быть:

  • отрезок;
  • точка;
  • пустое множество.

a1 = int(input())
b1 = int(input())
a2 = int(input())
b2 = int(input())

if a1 == b2:
    print(a1)
elif a2 == b1:
    print(b1)
elif a1 <= a2 and b1 >= b2:
    print(a2, b2)
elif a2 <= a1 and b2 >= b1:
    print(a1, b1)
elif a2 < b1 and b2 >= a1:
    if b2 > b1:
        print(a2, b1)
    else:
        print(a1, b2)
elif a1 < b2 and b1 >= a2:
    if b1 > b2:
        print(a1, b2)
    else:
        print(a2, b1)
else:
    print('пустое множество')
# Вывод:
1
2
1
3
1 2

Альтернативный вариант:


a1, b1, a2, b2 = int(input()), int(input()), int(input()), int(input())
if min(b1, b2) < max(a1, a2):
    print('пустое множество')
elif min(b1, b2) == max(a1, a2):
    print(min(b1, b2))
else:
    print(max(a1, a2), min(b1, b2))
# Вывод:
3
7
156
200
пустое множество

И, напоследок, как делать не надо ))


a1, b1, a2, b2 = int(input()), int(input()), int(input()), int(input())
if a1 < a2 and b1 < b2 and b1 > a2:
    print(a2, b1)
elif a1 < a2 and b1 < b2 and a2 != b1 and b1 > a2:
    print(a2, b1)
elif a1 < a2 and b1 == a2 and b1 < b2:
    print(b1)
elif a2 < a1 and b2 == a1 and b2 < b1: print(b2) elif a1 > a2 and a1 < b2 and b1 > a1 and b1 < b2:
    print(a1, b1)
elif a1 == a2 and b1 < b2:
    print(a1, b1)
elif a2 == a1 and b2 < b1:
    print(a2, b2)
elif a1 < a2 and b1 == b2:
    print(a2, b2)
elif a1 == a2 and b2 < b1:
    print(a1, b2)
elif a1 < a2 and b1 > b2 and a1 < b2:
    print(a2, b2)
elif a1 < a2 and b1 > b2 and a1 > b2:
    print(a1, b1)
elif a2 < a1 and b1 < b2 and b1 > a1:
    print(a1, b1)
elif a2 < a1 and b1 < b2 and b1 < a2:
    print(a2, b2)
elif a1 < a2 and b1 < b2 and b1 < a2 and a1 < b2 and b2 < b1: print(a2, b2) elif a1 == a2 and b1 == b2: print(a1, b1) elif a1 > a2 and b1 > a2 and b2 < b1 and a1 < b2: print(a1, b2) elif a1 > a2 and b1 == b2:
    print(a1, b1)
elif a1 > a2 and b1 > b2 and a1 < b2: print(a1, a2, ) elif a1 > a2 and a1 < b2 and a2 < b1:
    print(a1, a2)
elif a1 < a2 and a1 < b2 and b1 < a2 and b1 < b2 and b1 > a2:
    print(b1, a2)
else:
    print('пустое множество')
# Вывод:
1
3
4
8
пустое множество


Я пишу программу, которая анализирует определенный текстовый файл, в котором есть данные, которые я собираюсь обработать позже. Каждая часть отделена заголовком в квадратных скобках. Мне было интересно, как я могу поместить каждый сегмент в массив, используя заголовок в качестве имени для массива. Ниже приведен пример начала текстового файла. Я настроил форму, которая позволяет вам выбрать файл, который вы хотите обработать, а также настроил способ его обработки построчно, используя objReader.ReadLine в цикле.

[Params]
Version=106
Monitor=34
SMode=111111100
Date=20090725
StartTime=13:56:44.0
Length=00:24:30.5
Interval=1
Upper1=0
Lower1=0
Upper2=0
Lower2=0
Upper3=0
Lower3=0
Timer1=00:00:00.0
Timer2=00:00:00.0
Timer3=00:00:00.0
ActiveLimit=0
MaxHR=180
RestHR=70
StartDelay=0
VO2max=51
Weight=0

[Note]
TT Warm Up

[IntTimes]
00:24:30.5  140 83  154 174
0   0   0   41  112 33
0   0   0   0   0
0   12080   0   280 0   0
0   0   0   0   0   0

[IntNotes]

[ExtraData]

[Summary-123]
1470    0   1470    0   0   0
180 0   0   70
1470    0   1470    0   0   0
180 0   0   70
0   0   0   0   0   0
180 0   0   70
0   1470

[Summary-TH]
1470    0   1470    0   0   0
180 0   0   70
0   1470

[HRZones]
180
162
144
126
108
90
0
0
0
0
0  

3 ответа

Поскольку этот формат файла выходит за рамки обычного файла INI (см. комментарий Дэвида Йоу в ответе Николаса Кэри), я бы использовал правильный синтаксический анализатор, созданный генератором синтаксических анализаторов. Я предпочитаю использовать GOLD Parser Builder, но подойдет и любой другой генератор парсеров.


0

Lucero
13 Май 2011 в 02:31

Вы можете использовать шаблон примерно так.

List<String> paramsList;
List<String> noteList;
List<String> tempList;

while (line = objReader.ReadLine()) {
    if (line.StartsWith("[")) {

        // start new array
        if (line.Equals("[Params]"))
            tempList = paramsList = new List<String>();
        else if (line.Equals("[Note]"))
            tempList = noteList = new List<String>();

        // etc.

    } else if (String.IsNullOrEmpty(line)) {

        // ignore, end of array

    } else {

        // add element to array
        tempList.Add(line);

    }
}

// now use paramsList, noteList, etc. as needed

Я не совсем понимаю, как вы хотите использовать заголовок в качестве имени для массива. Всегда ли заголовки одинаковы для всех файлов? Вы не можете динамически выделять имя переменной на основе строки, и вы бы этого не хотели, если вам нужно использовать его в последующей обработке.


2

mellamokb
11 Май 2011 в 03:25

Я бы разобрал его в словарь:

    Dictionary<string, List<string>> d = new Dictionary<string, List<string>>();

    using (StreamReader reader = new StreamReader("filename"))
    {
        string token = null;
        string line;
        while ((line = reader.ReadLine()) != null)
        {
            if (line.StartsWith("["))
                d[token] = new List<string>();
            else
                d[token].Add(line);
        }
    }

Приведенный выше подход также добавит строки данных, если у вас есть повторяющиеся токены.


0

Ed Power
11 Май 2011 в 04:13

Решение задач с помощью словарей

Словари в Python удобно использовать для решения задач, связанных с:

  • хранением и обработкой данных о свойствах объекта;
  • сопоставлением данных;
  • подсчетом;
  • выбором подходящих по условию значений – включая регулярные выражения.

В последнем случае словарь эффективно заменяет условные конструкции if – elif – else. В качестве ключей в словарях можно использовать только неизменяемые типы данных – цифры, строки (включая «сырые») и кортежи. Однако в качестве значений можно использовать почти любые типы данных.

Задача 1: Скрабл

В настольной игре Скрабл (Scrabble) каждая буква имеет определенную ценность. В случае с английским алфавитом очки распределяются так:

  • A, E, I, O, U, L, N, S, T, R – 1 очко;
  • D, G – 2 очка;
  • B, C, M, P – 3 очка;
  • F, H, V, W, Y – 4 очка;
  • K – 5 очков;
  • J, X – 8 очков;
  • Q, Z – 10 очков.

А русские буквы оцениваются так:

  • А, В, Е, И, Н, О, Р, С, Т – 1 очко;
  • Д, К, Л, М, П, У – 2 очка;
  • Б, Г, Ё, Ь, Я – 3 очка;
  • Й, Ы – 4 очка;
  • Ж, З, Х, Ц, Ч – 5 очков;
  • Ш, Э, Ю – 8 очков;
  • Ф, Щ, Ъ – 10 очков.

Напишите программу, которая вычисляет стоимость введенного пользователем слова. Будем считать, что на вход подается только одно слово, которое содержит либо только английские, либо только русские буквы.

Пример ввода:
ноутбук

Пример вывода:
12

Решение:

Сначала напишем функцию isCyrillic(), которая возвращает True, если введенное слово содержит кириллические символы, и False, если буквы – латинские.

Затем создадим словари, где ключами будут очки, а значениями – строки из букв. Метод items() позволяет обращаться к ключам и значениям одновременно – если очередная буква в слове входит в одно из значений, генератор добавит ключ в список, а метод списка sum() подсчитает стоимость всего слова:

        import re
def isCyrillic(text):
	return bool(re.search('[а-яА-Я]', text))
points_en = {1:'AEIOULNSTR',
      	2:'DG',
      	3:'BCMP',
      	4:'FHVWY',
      	5:'K',
      	8:'JZ',
      	10:'QZ'}
points_ru = {1:'АВЕИНОРСТ',
      	2:'ДКЛМПУ',
      	3:'БГЁЬЯ',
      	4:'ЙЫ',
      	5:'ЖЗХЦЧ',
      	8:'ШЭЮ',
      	10:'ФЩЪ'}
text = input().upper()
if isCyrillic(text):
	print(sum([k for i in text for k, v in points_ru.items() if i in v]))
else:
	print(sum([k for i in text for k, v in points_en.items() if i in v]))
    

Задача 2: Рюкзак

Турист собирается в поход. Он сможет нести N кг вещей. Но вещей, которые он запланировал уложить в рюкзак, оказалось намного больше. Нужно определить, какие вещи от наиболее тяжелых к самым легким поместятся в рюкзак.

Пример ввода:
10

Пример вывода:
палатка
спальный мешок
удочка
термос
салфетки
жвачка

Решение:

Эту классическую задачу комбинаторной оптимизации удобно решать с помощью словаря, в котором содержатся все вещи. Для сортировки вещей мы воспользуемся методом sorted() и лямбда-функцией в качестве ключа сортировки. Решение выглядит так:

        things = {'зажигалка': 20, 'компас': 100, 'фрукты': 500, 'рубашка': 300,
      	'термос': 1000, 'аптечка': 200, 'куртка': 600, 'бинокль': 400, 'удочка': 1200,
          'салфетки': 40, 'бутерброды': 820, 'палатка': 5500, 'спальный мешок': 2250, 'жвачка': 10}
ves = int(input()) * 1000
sorted_things = dict(sorted(things.items(), key=lambda x: -x[1]))
for k, v in sorted_things.items():
	if v <=  ves:
    	print(k, sep='/n')
    	ves -= v
    

Задача 3. Email-адреса

Данные об email-адресах студентов хранятся в словаре:

        emails = {'mgu.edu': ['andrei_serov', 'alexander_pushkin', 'elena_belova', 'kirill_stepanov'],
      	'gmail.com': ['alena.semyonova', 'ivan.polekhin', 'marina_abrabova'],
      	'msu.edu': ['sergei.zharkov', 'julia_lyubimova', 'vitaliy.smirnoff'],
      	'yandex.ru': ['ekaterina_ivanova', 'glebova_nastya'],
      	'harvard.edu': ['john.doe', 'mark.zuckerberg', 'helen_hunt'],
      	'mail.ru': ['roman.kolosov', 'ilya_gromov', 'masha.yashkina']}
    

Нужно дополнить код таким образом, чтобы он вывел все адреса в алфавитном порядке и в формате имя_пользователя@домен.

Решение:

Задача решается с помощью генератора словаря (или списка) и метода sorted() в одну строчку:

        print(*sorted({i + '@' + k for k, v in emails.items() for i in v}), sep = 'n')
    

Задача 4: Права доступа

Вирус повредил систему прав доступа к файлам. Известно, что над каждым файлом можно производить определенные действия:

  • запись – W;
  • чтение – R;
  • запуск – X.

На вход программе подается:

  • число n – количество файлов;
  • n строк с именами файлов и допустимыми операциями;
  • число m – количество запросов к файлам;
  • m запросов вида «операция файл».

Для каждого допустимого запроса программа должна возвращать OK, для недопустимого – Access denied.

Пример ввода:
3
python.exe X
book.txt R W
notebook.exe R W X
5
read python.exe
read book.txt
write notebook.exe
execute notebook.exe
write book.txt

Пример вывода:
Access denied
OK
OK
OK
OK

Решение:

Для сопоставления соответствия команд правам доступа создадим словарь rights, для записи введенных имен – словарь names. Конструкция print(('Access denied', 'OK')[comm in names[n]]), которая выводит результат, аналогична print('OK' if comm in names[n] else 'Access denied') и заменяет цикл с условием:

        names = {}
rights = {'W': 'write', 'R': 'read', 'X': 'execute'}
for i in range(int(input())):
	x = input().split()
	names[x[0]] = [rights[i] for i in x[1:]]
for i in range(int(input())):
	comm, n = input().split()
	print('OK' if comm in names[n] else 'Access denied')
    

Задача 5: Продажи

Напишите программу, которая подсчитывает количество единиц товаров, приобретенных покупателями онлайн-магазина. На вход программе подается число n – количество записей о покупках, а затем n строк вида «Покупатель Товар Количество». Для каждого покупателя программа должна выводить список покупок.

Пример ввода:
5
Сергей Карандаш 3
Андрей Тетрадь 5
Юлия Линейка 1
Сергей Ручка 2
Юлия Книга 4

Пример вывода:
Андрей:
Тетрадь 5
Сергей:
Карандаш 3
Ручка 2
Юлия:
Книга 4
Линейка 1

Решение:

Проще всего такую задачу решить с помощью метода setdefault() – он позволяет получить значение из словаря по заданному ключу, и автоматически добавляет в словарь отсутствующие там элементы:

        sales = {}
for _ in range(int(input())):
	name, item, count = input().split()
	sales[name][item] = sales.setdefault(name, {}).setdefault(item, 0) + int(count)
for key in sorted(sales):
	print(f'{key}:')
	for i in sorted(sales[key].items()):
    	print(*i)
    

Задача 6: Объединение словарей

В Python предусмотрено объединение словарей:

merged_dict = {**dict1, **dict2}

Однако если в словарях есть одинаковые ключи, ключу в объединенном словаре будет присвоено значение из второго словаря. Напишите программу, которая объединяет два словаря и суммирует значения одинаковых ключей.

Решение:

Воспользуемся методом get() , который принимает второй аргумент – значение по умолчанию, в нашем случае это должен быть 0. Кроме того, применим объединение множеств с помощью оператора |:

        dict1 = {'яблоки': 100, 'бананы': 333, 'груши': 200,
         'апельсины': 300, 'ананасы': 45, 'лимоны': 98,
     	'сливы': 76, 'манго': 34, 'виноград': 90, 'лаймы': 230}
dict2 = {'яблоки': 300, 'груши': 200, 'бананы': 400,
     	'малина': 777, 'ананасы': 12, 'лаймы': 123, 'черника': 111, 'арбузы': 666}
merged_dict = {key: dict1.get(key, 0) + dict2.get(key, 0) for key in set(dict1) | set(dict2)}
print("Объединенный словарь:", merged_dict)
    

Задача 7: Коты и владельцы

В базе данных ветеринарной клиники информация о пациентах-котах хранится в списке кортежей. Данные о кошках и их владельцах записаны в формате «Кличка животного, Возраст животного, Имя владельца, Фамилия владельца»:

        cats = [('Мартин', 5, 'Алексей', 'Егоров'),
    	('Фродо', 3, 'Анна', 'Самохина'),
    	('Вася', 4, 'Андрей', 'Белов'),
    	('Муся', 7, 'Игорь', 'Бероев'),
    	('Изольда', 2, 'Игорь', 'Бероев'),
    	('Снейп', 1, 'Марина', 'Апраксина'),
    	('Лютик', 4, 'Виталий', 'Соломин'),
    	('Снежок', 3, 'Марина', 'Апраксина'),
    	('Марта', 5, 'Сергей', 'Колесников'),
    	('Буся', 12, 'Алена', 'Федорова'),
    	('Джонни', 10, 'Игорь', 'Андропов'),
    	('Мурзик', 1,'Даниил', 'Невзоров'),
    	('Барсик', 2, 'Виталий', 'Соломин'),
    	('Рыжик', 7, 'Владимир', 'Медведев'),
        ('Матильда', 8, 'Андрей', 'Белов'),
    	('Гарфилд', 3, 'Александр', 'Березуев')]


    

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

Игорь Бероев: Муся, 7; Изольда, 2

Решение.

Воспользуемся методом словарей setdefault() и методом join() для объединения элементов списков и кортежей с необходимыми разделителями:

        result = {}
for cat in cats:
	temp = cat[0] + ', ' + str(cat[1])
	result.setdefault(cat[2:], []).append(temp)
for k, v in result.items():
	print(' '.join(k) + ':', '; '.join(v))
    

Задача 8: Редкое слово

Напишите программу, которая принимает на вход строку, и выводит слово, которое встречается во фразе реже всего. Если редких слов несколько, нужно вывести то, которое меньше в лексикографическом порядке. Регистр слов не учитывается, знаки препинания в предложениях игнорируются.

Пример ввода:
дом, милый дом, милый.

Пример вывода:
дом

Решение:

Для подсчета символов, слов и т. п. удобно использовать метод get(), а для сортировки – лямбда-функцию, которая обеспечит вывод наименьшего из редких слов:

        words = {}
for i in input().split():
	i = i.strip('.,!?:;-').lower()
	words[i] = words.get(i, 0) + 1 
print(min(words.items(), key=lambda x: (x[1], x[0]))[0])
    

Задача 9: Дубликаты

Напишите программу, которая принимает на вход строку, и отслеживает, сколько раз каждый символ уже встречался. Количество повторов добавляется к символам с помощью постфикса формата _n.

Пример ввода:
a a a b c a a d c d d

Пример вывода:
a a_1 a_2 b c a_3 a_4 d c_1 d_1 d_2

Решение:

Самое компактное решение получается при использовании f-строк и метода get():

        sp = input().split()
result = {}
for i in sp:
	if i in result:
    	print(f'{i}_{result[i]}', end=' ')
	else:
    	print(i, end=' ')
	result[i] = result.get(i, 0) + 1
    

Задача 10: Анаграммы

Напишите программу, которая принимает на вход две строки и определяет, являются ли они анаграммами. Знаки препинания, пробелы и регистр при этом игнорируются.

Пример ввода:
Цари, вино и сало.
Лисица и ворона.

Пример вывода:
YES

Решение:

Избавиться от знаков препинания можно несколькими способами – с помощью strip(), replace(), или просто путем добавления в словарь только букв (метод isalpha()) из введенных строк:

        def a(word):
	result = {}
	for i in word.lower():
    	if i.isalpha():
        	result[i] = result.get(i, 0) + 1
	return result
print("YES" if a(input()) == a(input()) else "NO")
    

Задача 11: Расшифровка

На вход программе подается:

1. Зашифрованная строка.

2. N – число букв в словаре.

3. N строк, в которых в формате «буква: частота» указывается, сколько раз каждая буква встречается в слове.

Программа выводит расшифрованное слово.

Пример ввода:
?*!*!*
3
b: 1
a: 3
n: 2

Пример вывода:
banana

Решение:

Для сопоставления символов зашифрованного слова с буквами понадобятся два словаря:

        my_dict, w = {}, {}
sl = input()
for i in sl:
    w[i] = w.get(i, 0) + 1
for _ in range(int(input())):
    a, b = input().split(': ')
    my_dict[int(b)] = a
for i in sl:
    print(my_dict[w[i]], end='')
    

Задача 12: Запрос

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

Пример:

Код print(query({'course': 'python', 'lesson': 2, 'challenge': 17})) должен возвращать строку:

challenge=17&course=python&lesson=2

Решение:

Используя метод items(), функцию можно написать так:

        def query(params):
	return '&'.join(sorted(f'{k}={v}' for k, v in params.items()))
    

Примечание – в Python есть библиотека urllib для работы с параметрами URL. При использовании этого модуля функция выглядит так:

        from urllib.parse import urlencode
def query(params):
	sortedpar = dict(sorted(params.items()))
	return urlencode(sortedpar)
    

Другие варианты

Каждую из приведенных выше задач можно решить несколькими способами – с использованием словарей или без них. Генераторы сокращают код в несколько раз, но в то же время усложняют чтение – начинающим, возможно, будет проще использовать обычные циклы.

***

Боюсь, что буду допускать много ошибок. Что поможет мне стать классным специалистом?

Хорошее обучение невозможно без практики. Первые задачи можно решать самостоятельно, но если вы хотите большего, важно заручиться поддержкой опытных наставников, которые готовы вместе с вами пройти путь в IT.

Доверяйте профессионалам — онлайн-университету Skypro. Курс «Python-разработчик» подходит начинающим айтишникам для мягкого погружения в индустрию. Программа построена так, чтобы студент получил нужные навыки для должности младшего специалиста в любых компаниях.

Вы научитесь:

  • писать код в Colab, PyCharm и GitHub;
  • работать с базами данных SQLite, PostgreSQL, SQLAlchemy;
  • использовать фреймворки Django, Flask;
  • разрабатывать веб-сервисы и телеграм-боты.

У Skypro гарантия трудоустройства прописана в договоре, поэтому вам реально вернут деньги, если вы не устроитесь на работу в течение четырех месяцев после окончания обучения.

Модуль 10.4 (Задачи на словари) курса «Поколение Python: курс для продвинутых». В данном уроке продолжаем изучать работу с словарями.

Публикуем решения на урок 10.4 Задачи на словари.

Программисты, как вы уже знаете, постоянно учатся, а в общении между собой используют весьма специфический язык. Чтобы систематизировать ваш пополняющийся профессиональный лексикон, мы придумали эту задачу. Напишите программу создания небольшого словаря сленговых программерских выражений, чтобы она потом по запросу возвращала значения из этого словаря.

data =  [(input().split(':')) for i in range(int(input()))]
data = {i[0].lower(): i[1].strip() for i in data}
for i in [input().lower() for i in range(int(input()))]:
    print(data.get(i, "Не найдено"))

Анаграмма – слово (словосочетание), образованное путём перестановки букв, составляющих другое слово (или словосочетание). Например, английские слова evil и live – это анаграммы.

На вход программе подаются два слова. Напишите программу, которая определяет, являются ли они анаграммами.

Формат входных данных
На вход программе подаются два слова, каждое на отдельной строке.
Формат выходных данных
Программа должна вывести YES если слова являются анаграммами и NO в противном случае.

s = sorted(input())
dct1 = dict(zip(range(len(s)), s))

s = sorted(input())
dct2 = dict(zip(range(len(s)), s))

print('YES' if dct1 == dct2 else 'NO')

На вход программе подаются два предложения. Напишите программу, которая определяет, являются они анаграммами или нет. Ваша программа должна игнорировать регистр символов, знаки препинания и пробелы.

Примечание. Кроме слов в тексте могут присутствовать пробелы и знаки препинания .,!?:;-. Других символов в тексте нет.

s = sorted(s for s in input().lower() if s.isalpha())
dct1 = dict(zip(range(len(s)), s))
s = sorted(s for s in input().lower() if s.isalpha())
dct2 = dict(zip(range(len(s)), s))

print('YES' if dct1 == dct2 else 'NO')

Вам дан словарь, состоящий из пар слов-синонимов. Повторяющихся слов в словаре нет. Напишите программу, которая для одного данного слова определяет его синоним.

Примечание 1. Гарантируется, что синоним введенного слова существует в словаре.
Примечание 2. Все слова в словаре начинаются с заглавной буквы.

lovar=dict([[i for i in input().split(' ')] for i in range(int(input()))])
a=input()
for key,value in lovar.items():
    if key==a:
        print(value)
    if value==a:
        print(key)

На вход программе подается список стран и городов каждой страны. Затем даны названия городов. Напишите программу, которая для каждого города выводит, в какой стране он находится.

d = {}
for _ in range(int(input())):
    s = input().split()
    d[s[0]] = s[1:]
for _ in range(int(input())):
    city = input()
    for country, cities in d.items():
        if city in cities:
            print(country)

Тимур записал телефоны всех своих друзей, чтобы автоматизировать поиск нужного номера.

У каждого из друзей Тимура может быть один или более телефонных номеров. Напишите программу, которая поможет Тимуру находить все номера определённого друга.

Примечание 1. Телефоны одного человека выводите в одну строку через пробел в том порядке, в каком они были заданы во входных данных.
Примечание 2. Количество строк в ответе должно быть равно числу m.
Примечание 3. Телефон — это несколько цифр, записанных подряд, а имя может состоять из букв русского или английского алфавита. Записи не повторяются.

res = {}
for i in range(int(input())):
    a, b = input().lower().split()
    res[b] = res.get(b, []) + [a]

for i in range(int(input())):
    name = input().lower()
    print(*res.get(name, ['абонент не найден']))

Напишите программу для расшифровки секретного слова методом частотного анализа.

Примечание. Гарантируется, что частоты букв не повторяются.

f = input()
d = {}
for u in f:
    d.setdefault(f.count(u), u)

for _ in range(int(input())):
    key, value = input().split(':')
    f = f.replace(d[int(value)], key)
print(f)

Понравилась статья? Поделить с друзьями:
  • Напишите пожалуйста свой номер телефона для связи
  • Напишите пожалуйста ваш номер телефона запятые
  • Напишите номера телефонов
  • Напишите номер единого телефона пожарных служб и спасателей мчс россии
  • Напишите ваш номер телефона для связи