Novice with Python - python-3.x

I have just downloaded Python 3.3.2 to use on windows7 and run the msi file to install. After installation I have tried using the prog only to find that every time I run my initial print 'hello world' it keeps reporting a syntax error.
I have tried both single and double quotes but each time reports a syntax. It will add say 8 + 9 and return the answer but no joy with using a print statement.
I have tried both the shell and a new window but without success.
Any advice please much appreciated.

If you are using Python 3.x, you have to do print('hello world').
In Python 2.x, print was a statement, like if, for, etc. Now it is a function, thus the ().

You're probably using instructions for a python-2 program, where print was a statement, rather than a function. In python >= 3, you have to do print(something), rather than just print something.

Related

Python file does not work when executed by double click on Windows

Hi there is an issue I cannot work my head around.
Basically the script works very fine when I execute it via Powershell/cmd python ./myscript.py but not when I double click on it.
I checked with a much simpler script to check if the issue was with my Windows/Python3 configuration.
import os
if __name__ == "__main__":
print('hello')
os.system("PAUSE")
And this one works either by double click or by python ./myscript.py
I guess the issue is with my script but no error is returned and it works just as expected when launched in PS so I do not get it.
Would you guys have some debugging insights?
Similar to this old question: Python Script not working on double click

Executing cells in IPython equivalent to executing a Python script via terminal

I am trying to convert an IPython/Jupyter notebook into a Python executable script and I've got it working for the most part but I have some instances where I would have, for example,
a = [1,2,3]
a
or
s = 'some string'
type(s)
Now, left as is in a Python script will not print the variable "a" and will not display the output of "type(s)" if I run
python myscript.py
in the terminal (in most cases). I tried using the built-in print function but sometimes it'll only display
<built-in .... >
which is not what I want.
I'm not sure if what I am asking is possible but I would like it to run the Python code above in the terminal as it would when I run it in a cell in IPython or Jupyter notebook. The reason for writing this conversion script is because it was assigned as a homework exercise to be completed and I would appreciate any hints on doing this. Just to be clear, I don't think this is a required for the assignment as the instructor never mentioned it in class, but I am just curious.
To have the script print out, you'll need to explicitly use the print function. Eg,
a = [1,2,3]
print(a)
s = 'some string'
print(type(s))

Running python 2 code within a python 3 file

Is there a way to run python 2 code within a python 3 file?
I have to use a function that is coded in python 2 and is located in a python 2 file. But i need to import it and use the function within a python 3 file. Is is possible to run that function is like a python 2 mode?
It is not possible to run Python 2 code with Python 3, at least not in general. Although converting by hand is fairly straight-forward.
If you have long files you should also consider using 2to3 which will apply the needed fixes to make your code run with Python 3.
If you already have Python 3 installed you simply have to run the following in your terminal.
2to3 your_file_name.py
Note that sometimes 2to3 will be unable to transpile from Python2 to Python3. If it notices it, it will give you warnings and indicate what lines you have to fix manually.
Although, it can also happen that 2to3 doesn't even notice the output code will not work. This is what happened in the example you gave me in the comments:
input('Type text here: ').encode('utf-8').encode('hex')
This will not work in Python3 for reasons that you can explore here.
The reason 2to3 doesn't realize it is because this is actually syntactically perfectly valid code. And actually you could foreshadow input or str.encode in a way that would make this working code.
In conclusion, sometime you have to read the error and fix the code yourself.

How do I use output from SPARC solver as input to a python file?

My question: I need to save the output from a SPARC solver (which is currently appearing as text in the terminal) as a variable in my Python code. How can I do this?
Quick note: SPARC is a solver used for ASP (answer-set-programming) files - just mentioning this so that people don't get confused and think I am referring to asp.net.
I am running a Python file and an ASP file (in query mode) simultaneously, in the same terminal, using the command python pythonfile.py | java -jar sparc.jar aspfile.sp. Output from the python file in the form of sys.stdout.write() is being redirected as the input to the SPARC solver; i.e. the text I output becomes the query that is solved using my ASP code. This is working, and generating the output I want, but I can't figure out how to use that output in my Python code.
This is a follow-up to another question I have asked, found here. In that question I was trying to find out how to run an ASP file from my C++ code. I went with option 2 in the answer I was given, and am using redirected stdout with the two files running as separate processes. Please note one major change since the original question: I am now using Python instead of C++.
Further details if required: My Python version is 2.7 and my operating system is Ubuntu 14.04. I don't think it's relevant but, in case it is, you should know that my Python code is also being used to control a Gazebo Turtlebot simulation, and I am using ROS Indigo to run that simulation. I won't post my code unless someone requests it, as I just want an idea of what method I could use (I can't find anything that works on the internet), rather than needing my code debugged / assistance writing it. However I will post below an example of what is output to the terminal when my code runs, as this is the information I am trying to 'capture'.
SPARC V2.52
program translated
?- yes
?- no
It is the answers 'yes' and 'no' that I want to save as variables in my Python file.
SOLUTION:
For anyone wanting to do the same thing, I followed the answer provided by CaptainTrunky.
First I run the command python pythonfile.py | java -jar sparc.jar aspfile.sp > sparc.out, saving the SPARC output to the text file sparc.out.
Then I run python outputParser.py to run a script that prints the contents of the text file, allowing me to check that I'm manipulating the data correctly. The script is very simple:
lines = [line.strip('?- ') for line in open('sparc.out')]
lines = [line.strip('\n') for line in lines]
print lines
You can use python to read from sys.stdin with a script similar to the following (filter.py):
import sys
for line in sys.stdin.readlines():
if line.startswith('?- '):
print line.strip()
Then invoke your pipeline like this:
python pythonfile.py | java -jar sparc.jar aspfile.sp | python filter.py
I would suggest you do dump SPARK output to text file and then to parse it with you tool.
Write a shell script that does it for you:
python pythonfile.py | java -jar sparc.jar aspfile.sp > spark.out
python parse_out.py spark.out

what to type on a text editor find-and-replace to port python 2 prints to python3

I am trying to make this open source project to run in python 3.
So far the only fix is to replace print whatever to print(whatever)
Is there any way to tell the find and replace tool of pycharm to do this?
Don't use a text editor for this. Use 2to3 instead. It comes with Python.

Resources