|
1 / 1 / 0
Регистрация: 27.02.2020
Сообщений: 101
|
|||||||||||
Изучаем Python по книге Лутца17.04.2020, 12:37. Показов 9173. Ответов 87
Метки нет (Все метки)
на 490 стр 5 того издания 1 части Лутца встречаются первые задания по практики...
1. Написание базовых циклов. В данном упражнении предлагается поэкспериментировать с циклами for. а) Напишите цикл for, который выводит код ASCII каждого символа в строке по имени S. Для преобразования символа в целочисленный код ASCII используйте встроенную функцию ord (символ). Формально функция ord в Python З.Х возвращает кодовую точку Unicode, но если вы ограничите содержимое строки символами ASCII, то будете получать обратно коды ASCIL (Опробуйте ее интерактивно, чтобы посмотреть, как она работает.)
здесь что то пошло не так..
1
|
|||||||||||
| 17.04.2020, 12:37 | |
|
Ответы с готовыми решениями:
87
Объясните текст из книги Лутца "Изучаем python" М. Лутц Изучаем Python. Том 1 Лутц Марк - Изучаем Python. 5 издание |
|
5515 / 2868 / 571
Регистрация: 07.11.2019
Сообщений: 4,758
|
|
| 19.05.2020, 14:51 | |
|
Viktorrus, еще проще: создаем вначале одну переменную равную нулю, проходим по элементам списка и если число больше нуля - инкрементируем, если меньше - декрементируем. В конце смотрим на знак этой переменной. Все.
0
|
|
| 20.05.2020, 01:17 | ||||||||||||||||||||||||
|
u235, Да, Ваш алгоритм лучше. Правда я забыл рассмотреть такой вопрос. Чем является ноль, положительным или не тем и не другим? Нужно полазить по интернету. По памяти раньше вроде смотрел и вроде у математиков нет однозначного мнения на этот счет. Но для этой задачи нужно с этим определится.
Добавлено через 11 минут https://pythonz.net/references/named/str-f/ Внутри этого материала есть ссылка на "мини-язык форматирования". Его тоже посмотри. Все это сложно запомнить. Важно получить общее представление и понимание как этим пользоваться. И когда в задаче понадобится форматирование, то нужно просто обращаться к этому справочнику. Ну а потом можно переходить на изучение у Лутца Части V "Модули и пакеты". Добавлено через 46 минут На самом деле задача не простая, на оптимизацию. Алгоритм может оказаться не тривиальным. Можно конечно в лоб рассмотреть все возможные сочетания объемов данных пользователей и выбрать оптимальный. Все зависит как долго это будет обрабатываться. Если получится и программа не будет зависать на обработке больших объемов, то он однозначно будет давать верное решение. https://ru.wikipedia.org/wiki/... 0%B8%D0%B5 Отсюда видно, что если элементов N, то необходимо будет рассмотреть всех пользователей по одному, затем все сочетания из N по 2, затем по 3, и так далее пока k не станет равно N (в этом случае будет только одно сочетание, это весь список пользователей). Где ты взял это задание? Оно не простое. Помню Garry Galler, предлагал какой то инструмент в питоне, по работе с сочетаниями. Не знаю, найду ли эту информацию. Может кто то предложит лучший алгоритм для решения этой задачи. Пока попробуй через сочетания используя цикл for. Добавлено через 5 минут coa3, На самом деле предложенный мной алгоритм мне не нравится. Нужно еще подумать. Добавлено через 18 минут coa3, Из интернета: "Число 0 разделяет положительные и отрицательные целые числа и само не является ни положительным, ни отрицательным. " Поэтому, при решении задачи на вычисление количества положительных и отрицательных чисел, нужно это иметь ввиду. Добавлено через 12 минут coa3, Вообще , если на практике понадобится решать задачу на заполнение архива. то оптимальное решение. с учетом времени работы программы, будет такой алгоритм. Отсортировать все объемы данных пользователей по убыванию и в цикле проверять, что объем текущего пользователя влазит в оставшееся свободное место архива. И если он влазит, то имя пользователя заносить в список. Не могу гарантировать, что во всех случаях это будет оптимальным размещением объемов данных пользователей в архиве, но на практике это будет наиболее простым решением задачи. В общем прежде чем решать такие задачи, нужно сначала получить их математическое решение. Добавлено через 3 часа 52 минуты
Добавлено через 9 минут Я сразу не заметил, у тебя в цикле for ошибка
Когда при ветвлении каждая из веток требует своего условия, то нужно использовать в инструкции if блоки elif. В некоторых языках пишется else if: что переводится как "иначе если". Таких блоков elif в инструкции if может быть много. Синтаксис инструкции if
1
|
||||||||||||||||||||||||
| 21.05.2020, 18:38 | |||||||||||
|
coa3, Даю примеры форматирования.
**************************************** ******************************* Задано число num = 4/3 Вывести на экран число num с точностью четыре знака после запятой (точки), то есть должны получить на экране 1.3333 . **************************************** ******************************** Добавлено через 35 минут Форматированные строковые литералы также известны как f-строки или форматные строки. PEP-498 Добавлено в Python 3.6 Общий вид маркера: {(выражение)[!преобразование][:формат]}. Преобразование и формат не обязательны. Преобразование (обозначается ! ) Если затребовано преобразование, оно будет выполнено над результатом вычисления выражения непосредственно перед форматированием. !r Использовать repr(). !s Использовать str(). !a Использовать ascii() Форматирование (обозначается : ) Для форматирования используется Мини-язык форматирования. Общий вид инструкции: [[заполнение]равнение][знак]['#']['0'][минразмер][',']['.'точность][тип]. Точность Для чисел с плавающей запятой — это количество цифр, которые требуется вывести после десятичного разделителя (для форматирования f и F), либо до и после разделителя (для форматирования g и G). Для целых точность не обрабатывается. Для прочих типов — это количество знаков, которые требуется взять из значения.
coa3, Извини, я забыл. У тебя какая версия питона? f-строки или форматные строки работают только начиная с версии 3.6 .
0
|
|||||||||||
|
1 / 1 / 0
Регистрация: 27.02.2020
Сообщений: 101
|
|||
| 22.05.2020, 11:38 [ТС] | |||
|
Добавлено через 3 минуты
0
|
|||
| 22.05.2020, 12:04 | ||
|
Даже если тебе так необходимы какие то старые библиотеки, то ставят на комп две версии питона. Иначе ты никогда не изучишь современные средства питона.
0
|
||
| 23.05.2020, 03:31 | |
|
coa3, Реши задачу.
Задача по программированию **************************************** **************************************** ******** 1) Понятие ФУНКЦИЯ еще не введено, поэтому использовать только циклы, операторы, и переменные. 2) Входной параметр сделать вводимым с клавиатуры. **************************************** **************************************** ********* Картину, где показано, что нужно получить при выводе на экран, смотри по ссылке. Нужно написать два цикла, один для верхнего треугольника, второй для нижнего. Циклы идут один за другим (не вложенные). На каждом шаге цикла формируешь строку, содержащую пробелы и цифры и печатаешь ее. Добавлено через 3 минуты На условие "3) Использовать стиль PEP-8. " не обращай внимание. Твоя задача написать циклы, что бы на экран выводилось как на картинке.
0
|
|
|
1 / 1 / 0
Регистрация: 27.02.2020
Сообщений: 101
|
||
| 23.05.2020, 21:06 [ТС] | ||
|
Добавлено через 7 минут на 2рой страницы этой темы уже сталкивался с данной задачкой, так особо не дошла она...
0
|
||
| 23.05.2020, 23:16 | ||||||||||||||||||||||
На каждом шаге цикла формируется своя строка и распечатывается. Конструкция среза вида s[::-1]) переворачивает строку задом на перед:
s[i::-1] . В этом случае (когда шаг равен -1) берется начальная часть строки, до i-того элемента, и эта часть переворачивается задом на перед. Посмотрим например, как будет формироваться срез для пятой строки, который создается на пятом шаге цикла. Так как в питоне отсчет смещения начинается с нуля 0, то и переменные цикла будут получать значения начиная с нуля 0. Поэтому на пятом шаге переменная цикла будет равна четырем 4 (0, 1, 2, 3, 4).
Срез формируется начиная с элемента 5, имеющего смещение 4, и двигаясь вниз. следующим берется элемент со смещением 4-1 =3, то есть элемент 4, затем со смещением 3-1=2, то есть элемент 3 и так далее. В результате и получаем строку '54321'. Затем складываем строку пробелов и строку полученную с помощью среза и получаем строку для печати на текущем шаге цикла. Постарайся с этим разобраться, потом разберись со вторым циклом, где кроме среза используется метод:
0
|
||||||||||||||||||||||
|
1 / 1 / 0
Регистрация: 27.02.2020
Сообщений: 101
|
||||||
| 24.05.2020, 14:44 [ТС] | ||||||
Добавлено через 57 минут print((n + 1) * ' ' + s[i::-1]) читал, но уже и забыл, что здесь * делает...?
0
|
||||||
| 24.05.2020, 16:45 | |||||||||||||
|
coa3, n это введенное число, определяющее количество цифр в треугольнике и отсюда его размер.
Так как в первом треугольнике цифры начинают печататься с отступом в 10 пробелов, это видно из картинки, то мы в формируемую строку добавляем 10 пробелов (n + 1) * ' ' (девять плюс 1 умножить на пробел). Так как в первом треугольнике количество лидирующих пробелов всегда будет на один больше чем введенное число (что видно из рисунка), поэтому мы используем выражение (n + 1) * ' ' В выражениях звезда * обозначает умножение, а две звезды ** возведение в степень. Не только звезда, но и некоторые другие символы в питоне имеют в разных местах разный смысл. Это просто нужно знать. Добавлено через 10 минут (n + 1), а сформированная строка
(n+1)*' ' это строка, состоящая из десяти пробелов, к которой добавляется строка из срезе. В результате получаем строку для печати
coa3, И еще, активно пользуйся отладчиком, точками останова и пошаговым режимом в нем, что бы видеть, что делает программа.
0
|
|||||||||||||
|
1 / 1 / 0
Регистрация: 27.02.2020
Сообщений: 101
|
|||
| 24.05.2020, 20:00 [ТС] | |||
|
теперь все понятно, что с этой половиной происходит... Добавлено через 28 минут
0
|
|||
| 25.05.2020, 14:53 | ||||||||||||
|
coa3, Сначала дополню объяснение по звездочке. Для того, что бы понять какую роль играет звездочка в конкретном месте, нужно смотреть какую роль звездочка может играть в данном месте. Что бы звезда была оператором умножения, она должна иметь два операнда, которые размещены справа и слева от звезды, которые можно умножить один на другой. А что бы звезда была оператором распаковывания в аргументах функции, она не должна иметь слева и справа операндов для умножения и должна иметь права операнд в виде итерируемого объекта (который будет распаковывать). В нашем случае число 10 не является итерируемым объектом, поэтому звезда тут не может выполнять роль распаковывания. А вот выполнять роль умножения она может, что и делает.
Теперь по поводу
Синтаксис которого:
Таким образом мы для всех строк во втором цикле получаем одинаковую ширину и все данные, которые создает срез, выровненные по правому краю.
1
|
||||||||||||
| 27.05.2020, 11:51 | ||||||||||||||||
|
coa3, Ты изучил f-string форматирование по ссылке, которую я тебе дал?
И установил версию питона 3.7 ? Что бы попрактиковаться, вот задачка. Дан код вывода матрицы на экран, использующий метод str.format() для форматирования.
Что не понятно в исходном варианте функции, сразу спрашивай.
0
|
||||||||||||||||
|
1 / 1 / 0
Регистрация: 27.02.2020
Сообщений: 101
|
||
| 27.05.2020, 14:38 [ТС] | ||
|
3.7 поставил Добавлено через 48 минут width = 10 precision = 4 value = decimal.Decimal('12.34567') f'result: {value:{width}.{precision}}' # result: 12.35 ... my_var = 'cat' print(f'{my_var=}') # my_var = 'cat' # Имеется возможность дополнения строки до указанной длины: print(f'{my_var.upper() = :a^7}') # my_var = 'aaCATaa' print(f'{my_var.upper() = :b>7}') # my_var = 'bbbbCAT' animal = 'cat' f"{animal:>6}" # ' cat'
0
|
||
| 27.05.2020, 23:51 | |||||||||||
|
coa3, Мини-язык форматирования один и тот же и для метода format() и для f-строк. Только по разному размещаются форматируемые объекты. В методе формат объекты (здесь х) внутри скобок, format(x), а в f-строках объекты внутри строки и там внутри фигурных скобок. Кстати возможно несколько уровней вложения фигурных скобок. Вот как будет в данной задаче:
Общий вид инструкции: [[заполнение]равнение][знак]['#']['0'][минразмер][',']['.'точность][тип]. заполнение - это символ который заполняет незаполненные позиции. По умолчанию пробел (как и у нас). > Равнение вправо. Используется по умолчанию для чисел. (наш случай, поэтому не указываем ) '#' и '0' у нас не используется и поэтому пропущены. Минразмер — это целое, задающее минимальный размер (длину) значения, то есть длину строки. (мы задаем 4 позиции) Запятой "," и точности "." у нас нет тип - это тип представления, который требуется использовать. У нас число, поэтому указываем "d" Десятичная форма. Число по основанию 10. Я, что бы разобраться с этим, пользовался справочником по ссылке, которую я тебе дал. Если что то осталось непонятно, то спрашивай. Добавлено через 17 минут Что касается знака. Он означает: Минус "-" - Использовать знак только для отрицательных. Используется по умолчанию. Поэтому мы знак не указали. Добавлено через 27 минут coa3, Не переживай. В любом деле нужен опыт. Для того и решаем задачки, что бы ты набрался опыта. Со временем, набравшись опыта, начнешь сам решать такие задачи. Вон наши девушки фигуристки, такие молодцы, крутят четвертные прыжки. Ты что думаешь, они встали на лед и сразу стали крутить четвертные? Все требует труда и опыта. Никто с ходу не начинает программировать, Всем для того, что бы стать программистом нужен опыт. Как думаешь, почему предприятия не любят брать программистов без опыта работы. Требуют 2 года практики. Потому, что в любой профессии нужен опыт, и в программировании тоже. Поэтому не переживай, что ты пока не можешь сам писать программы. Мы с тобой поэтому и разбираем задачи, что бы ты набирался опыта. Наберешься опыта и тогда начнешь сам программировать.
0
|
|||||||||||
| 29.05.2020, 00:40 | |||||||||||
|
coa3, Реши задачу
В строке заменить пробелы восклицательным знаком. Если встречается подряд несколько пробелов, то их заменить на "?" **************************************** **************************************** В строке заменить пробелы восклицательным знаком. Если встречается подряд несколько пробелов, то их следует заменить одним знаком "?" **************************************** **************************************** Я допускаю, что это задача легко решается с помощью регулярных выражений. Но так как ни ты ни я еще пока не изучали регулярные выражения, то будем решать с помощью циклов. Составим алгоритм. Напишем строку "Данная строка, для тестирования решения задачи " Начиная с максимальной группы пробелов начинай заменять их на символ "?" используя метод,
За максимальное количество пробелов нужно взять длину исходной строки, так как исходная строка может состоять из одних пробелов. Не знаю производительности кода по такому алгоритму, но код будет самым простым. Один цикл for и один метод replace() в теле цикла. Даю заготовку. Вместо комментариев дополни ее необходимым кодом.
Добавлено через 2 минуты В результате программа должна выводить ?Данная!строка,!для!тестирования?решения !задачи? Что за ерунда, форум добавляет в строку пробел, который я набивая строку не делаю. Может он не воспринимает длинные слова без пробелов?
1
|
|||||||||||
|
1 / 1 / 0
Регистрация: 27.02.2020
Сообщений: 101
|
||||||
| 29.05.2020, 11:39 [ТС] | ||||||
|
с начало задача показалась легкой, но в итоге не решил...
0
|
||||||
| 29.05.2020, 15:38 | |||||||||||
|
coa3, Я же комментариями показал, что в теле цикла должно быть две строки, а ты загнал все в одну и неправильно. Может и можно загнать в одну строку, но когда изучаешь, лучше писать развернуто, что бы была очевидна последовательность работы программы.
Вот правильный код:
str - это твоя строка, к которой нужно применить метод. В данном случае s . Поэтому нужно писать s.replace() Я строку spaceStr, которая состоит из одних пробелов, которые нужно заменять в исходной строке s, формирую заранее перед тем, как применить ее в методе replace, так понятнее. И полученную в результате замены новую строку присваиваем переменной s , вместо исходной строки. Еще твоя одна ошибка. Я же написал, что благодаря -1 в шапке цикла, мы рассматриваем строки состоящие из одних пробелов, но за исключением строк, состоящих из всего одного пробела, который нужно заменить на восклицательный знак !. Эту замену мы выполняем выйдя из цикла. У тебя этой замены нет. Постарайся разобраться с моим кодом, если что не ясно, то спрашивай. Добавлено через 13 минут coa3, Когда разберешься, как работает код с двумя строками в теле цикла, тогда разберись здесь, когда две строки в теле цикла объединены в одну.
1
|
|||||||||||
|
5515 / 2868 / 571
Регистрация: 07.11.2019
Сообщений: 4,758
|
||||||
| 29.05.2020, 21:26 | ||||||
1
|
||||||
| 30.05.2020, 17:10 | |
|
u235, Это первый алгоритм, который я хотел предложить. Но потом удалил его из своего комментария, так как нашел более простой алгоритм. Если он даже работает медленнее чем Ваш, но он более простой. А я придерживаюсь того же принципа, что и Лутц, "При написании на питоне, на первом месте простота программы , а уже на втором ее быстродействие (за исключением когда это критично). Если же кого то больше интересует быстродействие, то нужно писать на языке линейки "С", например на С#. Ну а если уж совсем быстро, то это на языке assembler.
Но спасибо, что предложили свой вариант, что бы ТС знал, что задачу можно решить и так.
0
|
|
| 30.05.2020, 17:10 | |
|
Помогаю со студенческими работами здесь
80
Не работает код Эрик Матиз - Изучаем Python, упражнение 19.1
Исходники к книге Дэвида Гриффитса - Изучаем программирование на с
Проект на PyGame из книги «Изучаем Python. Программирование игр, визуализация данных, веб-приложения», Мэтиза Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
|
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net
REST сервисы временно не работают, только через Web.
Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
|
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
|
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
|
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи
и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|