Mig: Peter Severin Rasmussen. Datalogi-studerende på tredje år. Mere info her.
Interpreter, ikke compiler
Indentation og whitespace er vigtigt!
Ingen types skrives – men de er der
Java:
1
int n = 5;
Python:
1
2
n = 5
print type(n) # hvilket giver: <type 'int'>
;
{
, }
Installer Python 2.7 hvis du ikke allerede har. Guide kan findes her.
Start med at blive fortrolig med Python’s interpreter ved at følge denne tutorial (spring let hen over det med unicode).
Prøv desuden at oprette en fil, fx test.py
, med kodestykker fra ovenstående tutorial og kør den via Python.
Java:
1
2
3
4
5
6
7
if (a == 5 && b != 9) {
System.out.println("First case");
} else if (d > 10 || d == 3) {
System.out.println("Second case");
} else {
System.out.println("Last case");
}
Python:
1
2
3
4
5
6
if a == 5 and b != 9:
print "First case"
elif c > 10 or d == 3:
print "Second case"
else:
print "Last case"
Java:
1
2
3
4
5
6
7
while (x > 1) {
if (x % 2 == 0) {
x = x/2
} else {
x = 3*x + 1
}
}
Python:
1
2
3
4
5
while x > 1:
if x % 2 == 0:
x = x/2
else:
x = 3*x + 1
In Python løber for
i gennem hvert element i en liste.
Java (i gamle dage):
1
2
3
4
int[] numbers = {9,1,3,5};
for (int i = 0; i < numbers.length; i++) {
System.out.println(numbers[i]);
}
Java (nyere versioner):
1
2
3
4
int[] numbers = {9,1,3,5};
for (int num : numbers) {
System.out.println(num);
}
Python:
1
2
3
numbers = [9,1,3,5]
for num in numbers:
print num
Java (uden public static
etc.):
1
2
3
float triangleArea(float base, float height) {
return base * height / 2;
}
Python:
1
2
def triangle_area(base, height):
return base * height / 2
Default parameter:
1
2
3
4
5
6
def print_n_numbers(n, starting_from=1):
for i in range(starting_from, starting_from + n):
print i
print_n_numbers(5) # => 1, 2, 3, 4, 5
print_n_numbers(5, 6) # => 6, 7, 8, 9, 10
Returner flere værdier med tupler:
1
2
3
4
def division_and_remainder(a, b):
return (a / b, a % b)
print division_and_remainder(5,3) # => (1,2)
Funktioner kan tage andre funktioner som argument.
1
2
3
4
5
6
7
8
def do_twice(func):
func()
func()
def print_hello():
print "Hello"
do_twice(print_hello) # => Hello, Hello
Vi bruger opgaver fra følgende bog: Think Python (PDF)
Strings er lister af characters. Man kan lave slicing som vist her
1
2
3
4
5
name = "SDU Supercomputer challenge"
print name[1] # => "D"
print name[-2] # => "g"
print name[4:17] # => "Supercomputer"
print name[4:9] + name[18:27] # => "Superchallenge"
Normale lister understøtter de samme operationer som strings, fx slicing.
Man kan desuden rette specifikke elementer i en liste
og de kan udvides løbende (som ArrayList
i Java)
1
2
3
4
5
prices = [9.99, 24.99, 100, 50]
prices[1] = 25
print prices # => [9.99, 25, 100, 50]
prices.append(1337)
print prices # => [9.99, 25, 100, 50, 1337]
Dictionaries mapper fra key til value (kendes i Java som HashMap
)
1
2
3
4
5
salaries = {
"john" : 35000,
"bob" : 42000,
}
salaries["alice"] = 37000
Åben en fil og læs linje for linje
1
2
3
4
f = open("path/to/file.txt")
for line_with_whitespace in f:
line = line_with_whitespace.strip()
print line
Brug Python til at lave forskellige operationer på ordene i filen words.txt.
Klasser kan bruges til at repræsentere ting fra virkeligheden som en enhed. Det er en form for skabelon hvor fra man kan lave objekter med egenskaber som klassen beskriver.
Alt i Python er objekter og man kan tilføje og fjerne attributes fra objekter on the fly.
Java:
1
2
3
4
5
6
7
8
9
10
11
12
public class Person {
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
Person person = new Person("Bob", 42);
System.out.println(person.name);
Python:
1
2
3
4
5
6
7
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
person = Person("Bob", 42)
print person.name
Bemærk:
__init__
.__init__
– en særlig funktion der kaldes når der laves en instance af klassen.self
er første argument i alle metoder i klassen. Det er i stedet for this
.new
.Point
, der repræsenterer et punkt i 2d.
__str__
og __repr__
metode for at kunne printe objekter af klassen.__add__
, __sub__
og __mult__
).Line
, som repræsenterer et linjestykke fra et punkt til et andet i 2d (hint: brug Point
ovenfor)