Функция обратного числа в циклах python при добавлении оператора if

#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 , но никогда не используете его. Затем вы используете = with sum_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. О да, моя ошибка на самом деле пыталась найти причину бесконечного цикла, который я ошибочно // принял за % . Извините, если это кого-то ввело в заблуждение. На самом деле исходный код, хотя и немного слишком сложный, прекрасно работает на моем компьютере.