разные результаты выполнения между python3 и python2 для одного и того же кода - PullRequest
0 голосов
/ 08 июня 2018

когда я запускаю этот код python в python3, он показывает отличные результаты от python2?почему существуют разные значения?

    d = 0
    x1 = 0
    x2 = 1
    y1 = 1
    e=125
    phi=238
    temp_phi = phi

    while e > 0:
        print (e, temp_phi)
        temp1 = temp_phi / e
        print (temp1)
        temp2 = temp_phi - temp1 * e
        print (temp2)
        temp_phi = e
        e = temp2

        x = x2 - temp1 * x1
        y = d - temp1 * y1

        x2 = x1
        x1 = x
        d = y1
        y1 = y
    print (d + phi)
    if temp_phi == 1:
         print (d + phi)

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Проблема заключается в этой строке:

temp1 = temp_phi / e

В Python 2 оператор / выполняет целочисленное деление, когда оба его аргумента являются целыми числами.То есть он (концептуально) эквивалентен floor (float (a) / float (b)) , где a и b являются его целочисленными аргументами.В Python 3 / является делением с плавающей запятой независимо от типов его аргументов, а поведение / в Python 2 воссоздается оператором //.

0 голосов
/ 08 июня 2018

Причина изменения значений при работе в Python 2 и 3 заключается в том, что оператор / работает по-разному в зависимости от версии, в которой запускается программа. Об этом можно прочитать в PEP 238 в котором подробно описаны изменения, произошедшие в python 3

Чтобы гарантировать, что одинаковые результаты будут достигнуты как в python 2, так и в 3, используйте следующую инструкцию import при использовании python 2:

from __future__ import division

Это гарантирует, что ваш код совместим с обеими версиями Python.

...