(Spyder 3.6) Same code, different results.

63 views
Skip to first unread message

Bobby S

unread,
Oct 23, 2017, 10:21:08 AM10/23/17
to spyder
Hi guys,

I initially wrote this code in Spyder (Python 3.6) but was having trouble since it was giving me the wrong result. I decided to test it on some other IDEs so I copied and pasted the code into a couple of online IDEs and it gave me a different result. I have not been able to figure out why Spyder gives me a different output.

Here's the code:

import numpy as np  

def main():
    num1
= str(
       
7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450)

    digitCount
= 13
    temp
= []
    largestProduct
= 0
    currentProduct
= 1

   
for i in range(len(num1) - (digitCount)):
       
for j in range(digitCount):
            temp
.append(int(num1[i + j]))

        currentProduct
= np.product(temp)

       
if currentProduct > largestProduct:
            largestProduct
= currentProduct
            largestArray
= list(temp)

       
del temp[:]
   
print('Largest product array: %r' % largestArray)
   
print('Largest product: %r' % largestProduct)


main
()

In Spyder the output is:
Largest product array: [9, 7, 8, 1, 7, 9, 7, 7, 8, 4, 6, 1, 7]
Largest product: 2091059712

But for online IDEs (this is from repl.it) the output is:
Largest product array: [5, 5, 7, 6, 6, 8, 9, 6, 6, 4, 8, 9, 5]
Largest product: 23514624000

The correct answer is the output given by the online IDE. So I am confused to why Spyder is giving me the wrong result when the code is
exactly the same (since I just copied and pasted it). From my analysis, it seems that when the code is executed on Spyder, the loop doesn't
iterate through all the digits in the number but stops around half way.

I've tested the code it other IDEs and it seems Spyder is the only one giving me this result.

Any help would be greatly appreciated.

Thank you
Bobby

olli.s...@gmail.com

unread,
Oct 24, 2017, 8:13:35 AM10/24/17
to spyder
Hi Bobby,

It seems numpy in Spyder/Anaconda distribution defaults to 32 bit integers, and the largest multiplication overflows giving a wrong result:

Python 3.6.2 |Anaconda, Inc.| (default, Sep 19 2017, 08:03:39) [MSC v.1900 64 bit (AMD64)]
In: np.product([5, 5, 7, 6, 6, 8, 9, 6, 6, 4, 8, 9, 5])
Out: 2039787520
In: np.product([5, 5, 7, 6, 6, 8, 9, 6, 6, 4, 8, 9, 5],dtype="int32")
Out: 2039787520
In: np.product([5, 5, 7, 6, 6, 8, 9, 6, 6, 4, 8, 9, 5],dtype="int64")
Out: 23514624000

Regards,
   Olli

Bobby S

unread,
Oct 25, 2017, 10:00:02 AM10/25/17
to spyder
Ah I see, I will now be aware of that in teh future. Thank you very much for your help Olli, I have now fixed up the code and it is now outputting the correct value.

Regards,
Bobby
Reply all
Reply to author
Forward
0 new messages