SDU Supercomputer challenge - Øvet - Dag 1

09:00 - 09:45: Introduktion, Python vs. andre sprog

Mig: Peter Severin Rasmussen. Datalogi-studerende på tredje år. Mere info her.

Python vs. andre sprog

Java:

1
int n = 5;

Python:

1
2
n = 5
print type(n) # hvilket giver: <type 'int'>

Opgaver

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.


10:00 - 11:45: if, while, for, funktioner

if

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"

while

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

for

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

Funktioner

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

Mere om funktioner

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)

Higher order functions

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

Opgaver

Vi bruger opgaver fra følgende bog: Think Python (PDF)


12:00 - 12:45: Strings, lister, dictionaries

Strings

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"

Lister

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

Dictionaries mapper fra key til value (kendes i Java som HashMap)

1
2
3
4
5
salaries = {
    "john" : 35000,
    "bob"  : 42000,
}
salaries["alice"] = 37000

Opgaver


13:00 - 13:45: Filer

Læsning af filer

Å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

Case study: Word play

Brug Python til at lave forskellige operationer på ordene i filen words.txt.

Opgaver


14:00 - 14:45: Klasser

Klasser

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:

Opgaver