10.14 Числа и строки
@TODO: Якори #1 и #2 перепутаны.
- Числа
- Строки
join(), split() и вообще где читать
in и startswith(), replace()
Ленивый (ось OX направлена вниз, OY — вправо) график синуса:
- Вводим ширину W и высоту H экрана, A и B
Выводим W×H пробелов или "*" так, чтобы получить график синуса на отрезке [A, B] (включая
- В графике минимум H точек (по одной в строке)
- Необходимо масштабирование A…B к 0…H-1, а -1…1 к 0…W-1
- Оно вообще часто необходимо, надо фуцнкуию написать!
Неленивый график синуса: ось OX направлена вправо, OY — вверх
Надо хранить массив массивов, а потом join()-ить
Форматные строки и .format()
Описание языка форматирования; {{}}
- Конструирование форматной строки
Задачи
Задача_1: Fractions
Заданы два многочлена от х (А(х), В(х)) с рациональными коэффициентами, а также рациональные числа s и w. Проверить, является ли s решением уравнения A(x)/B(x)=w
Структура ввода: s, w, степень_А, коэффициенты_А, степень_В, коэффициенты_В. Числа задаются в виде m или m/n, где m, n - целые, n - положительное.
В программе-решении должна присутствовать функция, способная получать на вход как рациональные, так и вещественные числа, и возвращающая True или False.
- Тестовый пример 1:
уравнение: $$ (x^2 -(5/2)x + 1) / (x+3) = -1/8; s=1 $$; результат проверки: True
Input (1):
1, -1/8, 2, 1, -5/2, 1, 1, 1, 3
Output (1):
True
- Тестовый пример 2:
уравнение то же; s=11/12; результат проверки: False
Output (2):
False
- Тестовый пример_3:
уравнение то же; s=-3; результат проверки: False
Output (3):
False
Задача_2: График функции
Ввести через пробел ширину W и высоту H экрана, A и B, и произвольную всюду на [A, B] определённую python-формулу от x, которая может включать в себя функции из модуля math. Вывести с помощью "*" растровый график этой функции
A, B (A < B), а также минимальное и максимальное значение функции могут оказаться любыми.
График может получиться страшным из-за дискретности, если мы сильно не попали в экстремум. Например, график синуса от -61 до 61 страшный
(Неправда! Он красивый! Только на график синуса не похож… -- FrBrGeorge 2021-10-15 21:08:39)
- График должен быть непрерывным
- В идеале график должен занимать все строки и столбцы «экрана»
Input (1):
40 20 -6 6 sin(x)
Output (1):
** ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** **
Input (2):
20 24 5 50 (x-13)**2+x+1
Output (2):
* * * * * * * * * * * * * * * * * * * * * * * ** *****
К этой задаче тесты делать нужно, но результаты перекрёстного тестирования учитываться на будут, потому что способы округления и соблюдения непрерывности у всех могут оказаться разными
Задача_3: Форматирование
- Вводится ASCII-art, представляющий прямоугольный контейнер, заполненный жидкостью и/или газом ("#" — стенки, "." — газ, "~" — жидкость)
- Контейнер следует повернуть на 90° и вывести (жидкость и газ перераспределятся):
- На входе слои жидкости заполнены целиком, от края до края. Неполный слой жидкости на выходе дополняется до полного. Например, если в контейнер-ответ налить ещё три капли и повернуть обратно, он окажется полным)
- Также следует вывести горизонтальную диаграмму долей объёма, занимаемых газом и жидкостью:
- строка для газа состоит из символов '.', для жидкости — из символов '~'
- ширина диаграммы (т.е. длина её наибольшей строки) фиксирована и равна 20 символам
справа от каждой строки выводится в виде x/y доля объёма соответствующей субстанции от объёма контейнера, сокращать дроби не нужно
- дроби должны быть выравнены так, чтобы
- самые правые их символы располагались в одной и той же позиции,
- расстояние между самой длинной строкой и дробью — один пробел
при расчёте числа символов в строке, для округления использовать функцию round()
Input:
######## #......# #~~~~~~# #~~~~~~# ########
Output:
##### #...# #...# #~~~# #~~~# #~~~# #~~~# ##### .......... 6/18 ~~~~~~~~~~~~~~~~~~~~ 12/18