#python #numbers
#python #числа
Вопрос:
def number_from_other_side(n):
k = 1
a = 1
length = 0
sum_next_numbers = 0
while n // a != 0:
length = 1
a = a * 10
length -= 1
number_1 = n // (10**(length))
#if length == 0:
#return number_1
while length - k > 0:
next_number_1 = n // 10**(length - k)
next_number_2 = ( next_number_1 - 10**k * (next_number_1 // 10) ) * 10**k
sum_next_numbers = next_number_2
k = 1
last_number = (n - (n // 10) * 10) * 10**length
reverse_number = sum_next_numbers number_1 last_number
return reverse_number
Это мой код для обращения целого числа вспять. Я не должен использовать строки. Вот как я это сделал. Это вроде как работает, за исключением того, что число n — это только одно число, тогда, если я добавлю оператор if, он никогда не компилируется.
Оператор if, который я хочу вставить, находится в разделе комментариев (#).
У кого-нибудь есть какие-нибудь идеи, что здесь не так? Код компилируется, если я удаляю / комментирую оператор if. Код просто выполняется и никогда не заканчивается оператором if . То же самое, что и в бесконечном цикле.
Комментарии:
1. Что вы подразумеваете под «он никогда не компилируется»? Вы получаете сообщение об ошибке? Я не вижу ничего явно неправильного в этих строках.
2. Вы не «компилируете» python как таковой. Он интерпретируется/анализируется, то есть выполняется построчно при выполнении. Если есть синтаксическая ошибка, то код может не выполняться. Или, если произошла ошибка во время выполнения, он будет выполняться до тех пор, пока не дойдет до этой точки.
3. Вы устанавливаете
sum_of_digits
, но никогда не используете его. Затем вы используете=
withsum_next_numbers
, который никогда не был определен.4. Большинство реализаций Python, включая эталонную реализацию CPython, действительно включают этап компиляции.
5. @Bili Простое добавление этого
if
не приведет к бесконечному циклу, поскольку все, что он делает, — это допускает ранний выход. Должно быть, в то же время вы изменили что-то еще.
Ответ №1:
Добавление или удаление if
, похоже, не приводит к возникновению другой синтаксической ошибки. Тем не менее, я думаю, вы слишком усложняете ситуацию — вы можете перебирать цифры, извлекая последнюю цифру с %
помощью оператора, а затем (целое число) разделить число, чтобы перейти к следующей цифре:
def number_from_other_side(n):
result = 0;
while n > 0:
digit = n % 10
result = result * 10 digit
n //= 10
return result
Ответ №2:
Я не знаю, зачем нужно выполнять такую простую задачу. Это можно сделать с помощью простого цикла while .
n=12345
new=0
while n:
new *= 10
new = n% 10
n = n//10
print(new)
Ответ №3:
Причина, по которой он выполняется в бесконечном цикле, заключается в том, что если это однозначная цифра, то длина равна единице. Теперь в цикле while в строке 6 ==> n : {1-9} и a объявляется как 1. Итак, в первом цикле n//1 = n
во 2-м цикле n//10=n
тогда n//100=n
и так далее, вызывая бесконечный цикл.
поэтому добавьте оператор if перед этим циклом while
Комментарии:
1. Я запускаю код в своей голове, поэтому я могу ошибаться, но
length -= 1
похоже, что это приведетlength
к 0 с одной цифройn
.2.
9 // 1
выдает ненулевой ответ, поэтому вводится цикл, и он будет увеличиватьсяlength
, затем9 // 10
будет равен нулю, поэтому цикл завершится, затемlength
уменьшается обратно до 0.3. О да, моя ошибка на самом деле пыталась найти причину бесконечного цикла, который я ошибочно
//
принял за%
. Извините, если это кого-то ввело в заблуждение. На самом деле исходный код, хотя и немного слишком сложный, прекрасно работает на моем компьютере.