3

Lets say Person 1 has a python executable file (mac) that was written in Python 3.x. Person 1 sends said file to Person 2, who also has a mac, but only has Python 2.6.1. When Person 2 runs that file, will it work?

Someone said they needed to see the code, so:

#!/usr/bin/env python
# -*- coding: UTF8 -*-
topo1 = 0
topo2 = 0
print("This program helps compare two players: ")
print("It only uses that player's stats from the previous two years to determine their worth in fantasy baseball")
def complay1():
    global topo1
    print("Enter in the first player's stats below")
    homerun = input("Enter in the player's home run total from the most recent year: ")
    sb = input("Enter in the player's stolen base total from the most recent year: ")
    hit = input("Enter in the player's hit total from the most recent year: ")
    walks = input("Enter in the player's walk total from the most recent year: ")
    doubles = input("Enter in the player's doubles total from the most recent year: ")
    rbi = input("Enter in the player's RBI total from the most recent year: ")
    ba = input("Enter in the player's batting average from the most recent year, do not include a decimal point: ")
    hitL = input("Enter in the player's hit total from the year before the most recent year: ")
    homerunL = input("Enter in the player's home run total from the year before the most recent year: ")
    age = input("Enter in the player's age: ")
    gp = input("How many games did the player play last year?: ")
    topo1 += int(homerun)*3
    topo1 += int(sb)*2
    topo1 += int(hit)/2.5
    topo1 += int(walks)/4
    topo1 += int(doubles)
    topo1 += int(rbi)/3
    topo1 += int(hitL)/15
    topo1 += int(homerunL)
    topo1/(int(gp)/4)
    topo1 -= int(age)
    topo1 += int(ba)/2
    print(topo1, "is the total PLV+ for this player")
def complay2():
    global topo2
    print("Enter in the second player's stats below")
    homerun = input("Enter in the player's home run total from the most recent year: ")
    sb = input("Enter in the player's stolen base total from the most recent year: ")
    hit = input("Enter in the player's hit total from the most recent year: ")
    walks = input("Enter in the player's walk total from the most recent year: ")
    doubles = input("Enter in the player's doubles total from the most recent year: ")
    rbi = input("Enter in the player's RBI total from the most recent year: ")
    ba = input("Enter in the player's batting average from the most recent year, do not include a decimal point: ")
    hitL = input("Enter in the player's hit total from the year before the most recent year: ")
    homerunL = input("Enter in the player's home run total from the year before the most recent year: ")
    age = input("Enter in the player's age: ")
    gp = input("How many games did the player play last year?: ")
    topo2 += int(homerun)*3
    topo2 += int(sb)*2
    topo2 += int(hit)/2.5
    topo2 += int(walks)/4
    topo2 += int(doubles)
    topo2 += int(ba)/2
    topo2 += int(rbi)/3
    topo2 += int(hitL)/15
    topo2 += int(homerunL)
    topo2/(int(gp)/4)
    topo2 -= int(age)
    topo1 += int(ba)/2
    print(topo2, "is the total PLV+ for this player")       
complay1()    
complay2()
if topo1 > topo2:
    print("Player 1 is", ((topo1/topo2)*100)-100, "percent better")
if topo2 > topo1:
    print("Player 2 is", ((topo2/topo1)*100)-100, "percent better")
5
  • I ran it, and it gave me an error saying that topo1 isn't defined. I'll have to look into it, seeing as it is defined. Commented Mar 12, 2012 at 20:34
  • Run 3to2.py on it to get a python2-compatible version (more or less) Commented Mar 12, 2012 at 20:34
  • The problem was that you had topo1 instead of topo2 for complay2(). Great idea for a program by the way! Commented Mar 12, 2012 at 20:36
  • ah i see the error, in the second topo1 += int(ba)/2. I meant to put topo2, and since i didn't declare topo1 as global in complay2() Commented Mar 12, 2012 at 20:39
  • 3to2 Commented Mar 12, 2012 at 20:41

3 Answers 3

4

Probably not, the major version changes have no backward compatiblity.

EDIT: For your code example, it probably works. The only thing changed between 2 and 3 in your script is that print isn't a function in Python 2, which is unimportant because print(x) is the same as print x for the Python 2 interpreter, extra brackets don't hurt.

EDIT2: The division will break too, as said in a different answer. This is because int/int will result in an int in Python 2 and in an float in Python 3. This means 5 / 2 is 2 in Python 2 and 2.5 in Python 3. from __future__ import division fixes this.

Sign up to request clarification or add additional context in comments.

Comments

2

It's impossible to be completely certain without seeing the code, but there have been a lot of changes between 2.x and 3.x, making it extremely unlikely to work.

EDIT:

The division will break it. Put from __future__ import division at the top. Also, check if raw_input exists, assigning it to input.

Comments

0

What do you mean by executable? My idea of a python executable is that python is bundled in it so the end user doesn't ever need to install python to run it.

If you mean just the .py, looking at the code you posted, it looks compatible.

1 Comment

I just saved the python file as 'filename', without any extension, so it runs in terminal...

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.