Ошибка переполнения: невозможно преобразовать бесконечность с плавающей точкой в ​​целое число python3? - PullRequest
0 голосов
/ 03 апреля 2020

Я пытаюсь написать программу для решения этого шаблона и получить значение в nth позиции ( n варьируется от 1 до 10 ^ 5 )

1,2,7,20,61,182 ... Ссылка

Я смог написать функцию для этого. Но продолжайте получать

OverflowError: cannot convert float infinity to integer

ошибка для большего n ввода происходит в py3 . Но он отлично работает в py2 .

   def getPattern(n):
    total = 2
    tmptotal = 1
    count = 2

    if(n == 1 or n == 2):
        print(n)
    else:
        for i in range(2, n):
            if(count == 2):
                total = (total + (total/2))*2 + 1
                count = 1

            else:
                total = (total + ((total-1)/2))*2
                count = 2
                tmptotal = total
        return int(total)

    n =int(input())
    print(getPattern(n))

Итак, я надеюсь решить эту ошибку в py3 env.

1 Ответ

1 голос
/ 26 апреля 2020

In python3 / - деление числа с плавающей точкой, поэтому ваша переменная total превращается в число с плавающей точкой. Эквивалентный код для вашего python2 кода в python3 следующий:

def getPattern(n):
    total = 2
    tmptotal = 1
    count = 2

    if n == 1 or n == 2:
        print(n)
    else:
        for i in range(2, n):
            if count == 2:
                total = (total + (total // 2)) * 2 + 1
                count = 1

            else:
                total = (total + ((total - 1) // 2)) * 2
                count = 2
                tmptotal = total
        return total  # No cast needed

n = int(input())
print(getPattern(n))
$ python3 a.py
1000
330517704870201659222613814938036091491355508188037041916230092056707149336676224885194578462652015490977444424218145588987738645525154727966335681314488418506905056299580200969503693557241210318597600029397154510282236953905773609515391543263521668622626544531370086101386763599259723954366342063729034055207567140944645572557104099576971974229639101021224734402343310542961589984673879191254735147027265106522417859716025703587596412186791458002653591533043275692225713805000
$ python2 a.py
1000
330517704870201659222613814938036091491355508188037041916230092056707149336676224885194578462652015490977444424218145588987738645525154727966335681314488418506905056299580200969503693557241210318597600029397154510282236953905773609515391543263521668622626544531370086101386763599259723954366342063729034055207567140944645572557104099576971974229639101021224734402343310542961589984673879191254735147027265106522417859716025703587596412186791458002653591533043275692225713805000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...