Уведомления

Группа в Telegram: @pythonsu

#1 Март 12, 2020 09:29:54

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Циклы. Удаление 3-го числа из числа n =int(input()). Без использования строк

doza_and
Я вообще считаю авторов задач по программированию в условиях которых присутствует требование “не используя” лентяями или дураками.
ну зачем же так радикально? возможно задача ставиться именно для того чтобы научиться пользоваться, например, циклами, условным оператором, или битовым сдвигом. тогда задача выполнить с(без) помощью, вполне оправдана, особенно на начальном этапе обучения.
Alexanderrrrrror
То есть такой код на паскале
…. нужно реализовать на питоне
Alexanderrrrrror вам прнципиально именно такая реализация “в лоб”? с делением на 10 и умножением. Тоесть это какаято учебная задача на изучение какихто конкретных принципов? Потому как если нет, то это делаеться в одну строку как вам выше уже показали.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Март 12, 2020 09:33:11)

Офлайн

#2 Март 12, 2020 11:55:50

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

Циклы. Удаление 3-го числа из числа n =int(input()). Без использования строк

doza_and
Я вообще считаю авторов задач по программированию в условиях которых присутствует требование “не используя” лентяями или дураками.
Зря считаешь. Одно дело работать со строками. Это может понять любой дурак, так как в питоне это облегчено и срезы никаких особых умственных способностей не требуют. Другое дело работать с числами и раскладывать их на составляющие, используя математические свойства чисел. Если брать основы, то скорость работы питона со строками гораздо медленнее, чем с числами, потому что для питона строка - это такое множество чисел, а число - это одно число. Операция со строкой превращается во множество операций с числами. Операция с числом транслируется в операцию с числом.

В плане самого программирования, эти задачи учебные, учащийся должен научиться работать с числами. И работа с числами через превращение числа в строку - это самое последнее дело. Это всё равно, что список в питоне менять, превратив его в строку и заменять кавычки потом через replace() какой-нибудь - потенциальный источник трудноуловимых багов в реальных проектах. Нормальный человек - надёжный программист - так делать не станет, потому что это называется “чик-чик и в продакшн”.

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

То есть, если сисадмину дать задание установить сертификат любым способом, он его установит легко. Если же ему дать задание установить сертификат, не используя ничего, кроме самого компьютера, он скажет “а как я его скачаю на компьютер?”. До него даже не дойдёт, что сертификат можно собрать с нуля на компьютере. В древние времена был такой случай даже: взломщик проник на сервер, но не мог туда ничего закачать, так как не было прав; тогда он прямо на сервере написал программу и собрал её там же и запустил снаружи как скрипт в HTTP-запросе; программа помогла ему повысить локально права через уязвимость; после повышения прав он смог делать что угодно.



Отредактировано py.user.next (Март 12, 2020 12:13:17)

Офлайн

#3 Март 12, 2020 12:03:03

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

Циклы. Удаление 3-го числа из числа n =int(input()). Без использования строк

Alexanderrrrrror
Как, используя циклы,целочисленные переменные, удалить 3 число,из n =int(input())
то есть:
Пользователь вводит 12345
А вывод будет 1245
  
>>> n = 12345
>>> out = n // 1000 * 100 + n % 100
>>> out
1245
>>>
Циклы ты можешь использовать для подсчёта длины исходного числа и для наращивания степеней десятки в соответствии с полученной предварительно длиной числа. Фактически, тебе нужно получить эти степени десятки, чтобы знать, как поделить число в итоге.



Отредактировано py.user.next (Март 12, 2020 12:07:58)

Офлайн

#4 Март 12, 2020 20:04:19

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

Циклы. Удаление 3-го числа из числа n =int(input()). Без использования строк

py.user.next
тогда он прямо на сервере написал программу и собрал её там же и
py.user.next
Другое дело работать с числами и раскладывать их на составляющие, используя математические свойства чисел.
Вы все правильно говорите. Но в ваших примерах разложение чисел, написание программ на месте и прочие ограничения возникают в силу понятных и естественных причин. Никто не мешает преподавателю придумать задачу когда применение изучаемых средств языка ЕСТЕСТВЕННО.

В данном случае извините иметь код типа str(int(input())). это идиотизм.
Я бы мог со скрипом принять постановку задачи типа - создайте функцию принимающую на вход положительное целое число большее 99 и выдающую количество сотен в этом числе.

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



Офлайн

#5 Март 13, 2020 00:11:32

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

Циклы. Удаление 3-го числа из числа n =int(input()). Без использования строк

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

doza_and
В данном случае извините иметь код типа str(int(input())). это идиотизм.
Я вижу, что ему нужно сделать через
  
number = int(input())
, то есть никакой строчности он не должен использовать. Ему нужно взять число и с ним работать.

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

doza_and
А на практике для изучения работы с целыми на мой взгляд полезнее придумать задачу на извлечение фрагментов из упакованных двоичных данных.
Двоичные представления чисел, задачи на операции с двоичными данными, не покрывают всю алгебру, которая встречается в простеньких алгоритмах. Те же рекуррентные соотношения, которые нужно уметь делать, гораздо ближе к алгебре, чем к дискретной математике. Там нужно понимать свойства факториалов, делить многочлены, чтобы получить коэффициенты с переменной. Это мы даже не говорим о реальных задачах, где физика участвует и математики там хватает. Те же задачи на силу гравитации, на ускорение, скорость, путь, движения точек - на них одними битовыми операциями ты не отделаешься. А сейчас время такое, что нужно и карты всяких сервисов обрабатывать, геометрию применять далеко не школьную. Это всё на простеньких задачках про битовые сдвиги не постигнешь. Надо уметь работать с числами, надо уметь работать с многочленами, надо понимать природу операций над математическими объектами. Если он будет пытаться на срезах что-то выполнить, он далеко не уедет на этом.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version