This document is a very quick primer that compares the basic constructs and data structures of Java and Python 3, which is the version that you should use for the project.
Python is a great language for this course because it requires much less boilerplate code than Java, it has very lightweight servers (unlike J2EE), and it has excellent packages, a REPL, and an incredible wealth of documentation and tutorials for the language.
To get started with Python, please refer to The Python Tutorial.
Java main classes have a special method called main
that denotes an executable class. They are also typically defined in a
file with the same name as the class name. For example, the
file HelloWorld.java
may contain
class HelloWorld
:
class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }
In contrast, every Python file is a script that can be run by
typing python <filename>
in the shell. The script
is then executed from top to bottom. For
example, helloworld.py
may simply look like this:
print ("Hello World")
Java requires that functions be defined as part of class definitions:
class HelloWorld { public void f() { System.out.println("Hello World"); } }
In Python, functions can be directly defined, independently of class definitions:
def f(): print ("Hello World")
This means you can then directly call f
as
f()
.
In Java, statement grouping is defined by using curly
braces { }
. In contrast, Python groups statements based
on indentation level. This is why in the above function definition,
the print ("Hello World")
statement is indented—so it
is grouped as part of the def f()
statement. You will see
this for the other control structures below.
Java:
int n = 0; if (1 > 1) { n = 1; } else if (1 < 1) { n = 2; } else { n = 3; }
Python:
n = 0 if 1 > 1: n = 1 elif 1 < 1: n = 2 else: n = 3
Java:
switch(i) { case 0: i = 0; break; case 1: i = 1; break; default: i = 2; }
Python doesn't have a switch
statement, so you need to
use if/elif/else
:
if i == 0: i = 0 elif i == 1: i = 1 else: i = 2
Java has a for
loop:
for (int i = 0; i < 100; i++) { }
The above can be mechanically translated to Python as follows:
i = 0 while i < 100: # note: python doesn't have the ++ shorthand, # but has the += shorthand i += 1
Java has a more convenient for
loop for iterables:
List<Integer> a_list = ...; for (int i : a_list) { System.out.println(i); }
Python's for
loop is similar:
l = [0, 1, 2] for i in l: print (i)
But Python also has a powerful for-comprehension
capability:
l = [0, 1, 2] r = range(3) # l and list(r) contain the same values # prints: 0, 1, 2 for i in l: print (i) # prints: [0, 2, 4] l2 = [i*2 for i in l] print (l2) # prints: [0, 2, 4] print ([i*2 for i in r])
The for-comprehension
also accepts Boolean conditions
in the if
clause:
# prints: [0, 4] print ([i*2 for i in range(3) if i != 1])
Java has maps that map keys to values:
Map<String, String> map = new HashMap<String, String>(); map.put("hello", "world");
Python has a similar data structure called a dictionary. There are
multiple ways to instantiate it. Notice that you can directly create a
data structure with initial data without resorting
to .put()
calls:
# Method 1 d1 = dict() d1["hello"] = "world" # Method 2, passing key values in constructor d2 = dict(hello="world") # Method 3, using {} d3 = {} d3["hello"] = "world" # Method 4, initializing {} (note that the key has string quotes around it) d4 = {"hello": "world"}
Dictionary entries can be accessed easily:
# "world" print (d4["hello"])
Instead of arrays, Python usually uses lists, which are similar to an ArrayList in Java. The semantics of the two are much the same (i.e., in how we access them), but Python's lists can have variable length and store values of different types. Python uses the following syntax for lists:
l1 = [0, 1, 2]
Python also has a useful range()
function:
# [0, 1, 2] print (list(range(3))) # [0, 2, 4] print (list(range(0, 5, 2))) # [0, 1, 2] print ([0, 1, 2])