See [Code Club].
På [Kodklubben Dokumentation] finns mera information.
Lada ner den här filerna i Downloads mappen:
Starta Minecraft och börja en spel.
$ cd Downloads
$ python3 mcbuild.py house.mcb
Öppna house.mbc
i Thonny IDE och ändra husets ritning:
- Använt andra block
- Ändra husets storlek
- Ändra rumindelning
- ...
Obs. Efter varje ändring ska du spara filen och köra mcbuild.py igen.
Spara filerna i Downloads mappen.
cd Downloads
python3 minecraft_house.py
python3 -i minecraft_bunker.py
>>> clear_bunker_grid(4)
>>> build_bunker_in_grid(1,1)
>>> build_bunker_in_grid(3,2)
>>> build_bunker_in_grid(0,0)
- Right-click på
maze3.py
och välja 'Save link as' (spara link som).
Spara filen i Downloads
mappen.
- Öppna en terminal och ge följande kommandot för att köra programmet:
cd Downloads
python3 maze3.py
- Testa programmet med olika inputs.
-
Öppna Thonny Python IDE
-
Välja
File
-Open
från menyn och letar frammaze3.py
i mappenDownloads
En labyrint av storlek 4 har 4x4 'cells' (rutor). En ruta är 2 nummer: (x,y). Till exempel (0,0), (1,0), (0,1), och (3,3).
Den första nummer kallas x-koordinaten och den andra y-koordinaten. X-koordinaten ger rutans plats (i labyrinten) från vänster till höger. Y-koordinaten ger rutans plats från toppen till botten.
Koordinater börjar med 0 och är maximalt 1 mindre än labyrintens storlek. Dvs, i en labyrint med storlek 4 finns koordinater 0, 1, 2 och 3.
- Leta fram den Python funktioner (functions) som ger x-koordinaten och y-koordinaten för en cell. Vad heter dessa functioner?
Leta fram funktionen draw_maze
som ritar labyrinten. Här kan du
ändra färgerna på labyrinten:
color = {
'background' : 'LightGrey',
'walls' : 'DarkBlue',
}
'background'
(bakgrund) är färgen för labyrintens
bakgrund. 'walls'
är färgen på labyrintens väggar. I koden är
bakgrunden definierat som 'LightGrey'
och väggarna som 'DarkBlue'
.
I filen /usr/share/X11/rgb.txt
på Raspberry Pi hittar du namn på
många färgen. Öppna den fil i Thonny.
- Ändra färg på labyrintens bakgrund och väggarna.
När du ritar en labyrint med storlek 30 eller mera, passar denn inte i fönstret. Men om det är ok med små rutor, så kan vi rita lite större labyrinter.
Leta fram funktionen image_scale
i maze3.py
:
def image_scale():
return 30
Den här funktionen definierar att 1 koordinat kommer överens med 30 pixlar på skärmen. Alltså, 1 ruta blir ritat som en kvadrat / fyrkant med varje sida 30 pixlar lång.
För att ändra storleken av en ruta (och labyrinten), ändrar du nummret
30
. Tar du 20
, så blir labyrinten mindre. Tar du 40
, så blir
labyrinten större.
Många program frågar användaren att mata in text input och sen genererar programmet text output. Programmet [maze/maze.py], som vi körde förra gång, frågar användaren att mata in labyrintens storlek som text och sen ritar den en labyrint och skriver något text.
Hur skriver man kod som läser in text input och genererar text output?
I en dator er text rader av symboler. Denna rader kallas
strings. För att skriva kod för strings, måste man skilja program
kod text från string text. I Python använder man '
och "
för att
inkludera strings i kod. Här är några exempel av strings i Python:
'Hej!'
'KodKlubben'
"Hello world!"
'Här är en exempel: "Hello world!"'
Obs. i varje exempel är den första och sista '
eller "
inte del av
den string. Symbolerna '
och "
bara används för att starta och
avsluta en string. Dvs., string 'Hej!'
har 4 symboler: H
, e
, j
,
och !
. En string ska börjas och avslutas med samma symbol. Om man
vill ha en string med en '
symbol kan man ta "
som start och
avslutning. Sista exempel har '
som start och avslutningssymbol och
innehåller 2 "
symboler.
Öppna Thonny IDE och skriva några strings i Shell fönstret:
Öppna en ny fil i Thonny och skriv följande programmet:
s = input('Vad heter du?')
print(s)
Det här programmet kör Pythons input
'function'. input
läser in
från tangentbordet tills Enter och ger tillbaka den inlästa string.
När du kör programmet i Thonny ser det ut som här:
-
Hur kan du ändra programmet för att få mellanslag mellan frågan 'Vad heter du?' och svaret?
-
Strings kan klistras ihop med plus:
'första' + ' andra'
blir'första andra'
. Kan du ändra programmet så att den skriver först Hej och sen svaret på frågan Vad heter du?:
Vad heter du? Victor
Hej Victor
- För att skriva varenda symbol i an string på en rad, kan man skriva en 'for loop' (Pröva i Thonny):
s = input('Vad heter du? ')
for c in s:
print(c)
Obs. akta 'indentation' på början av print
-raden (dvs. 4 mellanslag).
- Med en 'for loop' kan man också räkna ut längden av en string:
s = input('Vad heter du? ')
l = 0
for c in s:
l = l + 1
print('Ditt namn har', l, 'bokstäver.')
- Man kan också läsa in ett nummer:
n = input('Nummer: ')
print(n)
Men vet programmet faktiskt att det är ett nummer?
- Försök läsa in och addera 2 nummer:
n1 = input('Nummer 1: ')
n2 = input('Nummer 2: ')
print(n1 + n2)
Kör programmet i Thonny. Vad händer?
Programmet har klistrat ihop 2 strings!
- Som sagt,
input
ger bara strings. Om du vill läsa in ett nummer, börjar du med att läsa in en string och sen omvandlas du den i ett nummer medint
:
nstr = input('Nummer: ')
n = int(nstr)
print(n)
Obs. om du kör det här programmet, ska du ge bara siffror som input.
Kan du ändra programmet i uppgift 6 så att den adderar 2 nummer istället för att klistra ihop 2 strings?
- Innan du använder
int
ska du vara säker på att det finns bara siffror i den string som du vill konvertera i ett nummer.int
kraschar om det finns icke siffror i stringen:
>>> int('12ab')
Traceback (most recent call last):
File "<pyshell>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '12ab'
Pröva int
i Thonnys 'Shell' fönstret och kolla vad händer med olika
'inputs'.
- Du kan använda en
for loop
för att kolla om det finns bara nummer i stringen innan du omvandlar den i ett nummer:
nstr = input('Nummer: ')
for c in nstr:
if c not in ['0','1','2','3','4','5','6','7','8','9']:
print('Det finns icke-siffror i', nstr)
exit()
print('Numret är:', int(nstr))
Kör programmet med olika input.
Obs. Programmet använder exit
'function' för att avsluta när en
icke-siffra har hittats.
- En program som omvandlar många nummer, ska ha en namn for den omvandlingskod I Python skriver man en 'function' for att ge en namn till kod:
def string_to_int(s):
for c in s:
if c not in ['0','1','2','3','4','5','6','7','8','9']:
print('Det finns icke-siffror i', s)
return 0
return int(s)
nstr = input('Nummer: ')
print('Numret är:', string_to_int(nstr))
Kör programmet med olika input.
Här är labyrint program:
-
[maze/maze.py]: har 3 'bugs' som vi försökte fixa förra gången.
-
[maze/fixed_maze.py]: har fixat den 3 bugs men kan krascha på några inputs.
-
[maze/maze2.py]: har lite mindre bugs.
-
[maze/maze3.py]: har lite mindre bugs och mera output.
Ladda ner och köra dessa maze program. Försök att krascha dom.
Labyrinten har rutor. Mellan rutorna finns väggar. Några väggar har dörrar som man kan gå genom. Här är en labyrint:
Hur hittar man kortaste vägen mellan 2 rutor i labyrinten?
Vi letar efter en väg som har det minsta antalet dörrar. Det är möjligt att det finns flera av dessa kortaste vägar. Det är också möjligt att det inte finns en väg alls.
En algoritm kan man utföra för att komma från en startpunkt till ett svar. En algoritm är som en recept som man följer steg för steg. För att kallas en algoritm, ska stegen vara så exakta att svaret är samma oberoende av vem eller vad som kör algoritmen. Om man börjar från samma startpunkt och följer stegen, så ger algoritmen alltid samma svar.
Här är en algoritm som hittar kortaste vägen i en labyrint:
-
Först väljer man en ruta som är start och en ruta som är slut.
-
Skriv numret 0 i startrutan.
-
Hitta alla rutor som inte har något nummer än men som har en dörr till en ruta som redan har ett nummer och gör såhär:
-
om en grannruta med dörr har numret x, räkna ut vad x+1 är och skriv svaret i alla hittade rutor som inte har ett nummer än.
Till exempel, om grannrutan har numret 0, så skriver du numret 1 i alla hittade rutor utan nummer.
Obs. det är viktig att hitta alla grannrutor med dörr innan du fortsätter!
-
-
Gör föregående steg igen tills alla rutor som man hittar har ett nummer.
-
Kolla om slutrutan har ett nummer
-
om den har ett nummer, så är numret det minsta antal dörrar på vägen från start till slut.
-
om den inte har ett nummer, så finns det ingen väg från start till slut.
-
Algoritmen är kodat i filen [maze/maze.py].
-
Ladda ner filen [maze/maze.py] och öppna med Thonny IDE.
-
Kör programmet några gånger och pröva olika labyrinter.
-
Fixa "function"
draw_trail
och function__main__
och kör programmet igen. -
Om du fixade programmet rätt, så visas den en ruta genom labyrinten.
Det finns också en fil [maze/fixed_maze.py]. I den filen är alla 'bugs' redan fixat. Ladda ner och kör [maze/fixed_maze.py] och kolla att den visar vägen genom labyrinten:
Ingen KodKlubben
-
Starta Minecraft och skapa en ny värld.
-
Lämna Minecraft fönstret i bakgrunden (
TAB
) och öppna Thonny Python IDE. -
Koda i Python, se exempel.
-
Kör din kod och kolla vad händer i Minecraft fönstret.
Kopiera den här exempel i Thonny Python IDE, spara filen (varje exempel i en ny fil), och kör din kod.
from mcpi import minecraft, block
mc = minecraft.Minecraft.create()
msg = "Hej! Jag kodar Minecraft."
mc.postToChat(msg)
from mcpi import minecraft, block
import time
def jump(distance):
#Let's wait 1 second
time.sleep(1)
#Retrieve the X,Y,Z coordinates of the player
pos=mc.player.getPos()
#Change the Y coordinate of the player to position it up in the sky
mc.player.setPos(pos.x, pos.y + distance, pos.z)
# Connect to Minecraft
mc = minecraft.Minecraft.create()
#Main Program Starts Here:
jump(100)
from mcpi import minecraft, block
import time
def createTower():
#Let's wait 1 second
time.sleep(1)
#Retrieve the X,Y,Z coordinates of the player
pos=mc.player.getPos()
#Create a 10-block high tower, 5 blocks away from the player
mc.setBlock(pos.x + 5, pos.y, pos.z, block.STONE)
mc.setBlock(pos.x + 5, pos.y+1, pos.z, block.STONE)
mc.setBlock(pos.x + 5, pos.y+2, pos.z, block.STONE)
mc.setBlock(pos.x + 5, pos.y+3, pos.z, block.STONE)
mc.setBlock(pos.x + 5, pos.y+4, pos.z, block.STONE)
mc.setBlock(pos.x + 5, pos.y+5, pos.z, block.STONE)
mc.setBlock(pos.x + 5, pos.y+6, pos.z, block.STONE)
mc.setBlock(pos.x + 5, pos.y+7, pos.z, block.STONE)
mc.setBlock(pos.x + 5, pos.y+8, pos.z, block.STONE)
mc.setBlock(pos.x + 5, pos.y+9, pos.z, block.STONE)
mc.setBlock(pos.x + 5, pos.y+10, pos.z, block.STONE)
# Connect to Minecraft
mc = minecraft.Minecraft.create()
#Main Program Starts Here:
createTower()
from mcpi.minecraft import Minecraft
from mcpi import block
# Connect to Minecraft
mc = Minecraft.create()
# Determine the Player's current position.
x,y,z = mc.player.getTilePos()
PYRAMID_SIZE = 5
PYRAMID_BLOCK1 = block.STONE
PYRAMID_BLOCK2 = block.GLOWSTONE_BLOCK
OFFSET = 5
# Create empy space to build the pyramid
mc.setBlocks(x-PYRAMID_SIZE-2, y, z+OFFSET,
x+PYRAMID_SIZE+2, y+PYRAMID_SIZE+2, + z+2*PYRAMID_SIZE+2,
block.AIR.id)
d = 0
s = PYRAMID_BLOCK1
for layer in range(PYRAMID_SIZE):
mc.setBlocks(x-PYRAMID_SIZE+d, y+layer, z+OFFSET+d,
x+PYRAMID_SIZE-d, y+layer, z+OFFSET+(2*PYRAMID_SIZE - d),
s.id)
d += 1
if s == PYRAMID_BLOCK1:
s = PYRAMID_BLOCK2
else:
s = PYRAMID_BLOCK1
mc.player.setPos(x, PYRAMID_SIZE+1, PYRAMID_SIZE+OFFSET)
[Minecraft control keys]: Hur du använder tangentbordet och mus i Minecraft.
[Minecraft Python Challenges]: Enkla exempel som visar hur du programmerar Minecraft.
[Minecraft API]: Mycket om Minecraft Python API.
[MagPi Minecraft Maker Guide]: Tidning om Raspberry Pi och Minecraft.
[mcpipy]: GitHub sidan med Python code för att programmera Minecraft.
Den här gången fortsätta vi med Python kod, men nu ska vi rita.
-
Tömma
Downloads
mappen -
Ladda ner .zip filen från https://github.com/vbos70/KodKlubben
-
Extrahera .zip filen i
Downloads
mappen
-
Öppna filen
Downloads/KodKlubben-master/turtle/drawing1.py
-
Kör (klicka gröna pil knappen)
-
den ritar flera cirklar?
-
den ritar röda cirklar?
Här ar flera turtle "commands". Testa vad dom gör i din kod.
forward(10)
backward(10)
left(90)
right(90)
stamp()
speed(1)
speed(10)
Och det finns ännu flera commands på Python Turtle Graphics
Leta fram och klicka Thonny IDE på meny.
När Thonny har startas up, ser du en fönster som den här:
Edit fönstret är just under knapparna. Här skriver man Python kod /
program som du kan spara i filer. Filnamnet visas ovanpå fönstret.
Här på bilden heter den <untitled>
(namnlös).
Längst ner finns "Shell" fönstret som visar "Python":
Python 3.5.3 (/usr/bin/python3)
Här skriver man enskilda Python meningar som Python beräknar efter
du klicka Enter
. Till exempel:
>>> 1+3
4
Här finns flera Python "expressions" (meningar) som du kan försöka
10 + 2 * 3
(10 + 2) * 3
1.5 - 0.32
Python kan också räkna med "strings" (listor av bokstäver):
"Hej, vad heter du"
'Hej, vad heter du' + "?"
"Här kodar Ingås kodklubb!"
"Hej!" * 10
Strings börjar och slutar med "
eller '
.
Första gången ska vi
-
Bekanta oss med Raspberry Pi:
- Öppna "boxen"
- Ansluta allt
- Starta upp
- Stänga av
- Sätt in SD kortet
- Starta upp igen
Se även https://projects.raspberrypi.org/en/projects/raspberry-pi-getting-started
-
Upptäcka vad Raspberry Pi kan
Starta upp program som är redan installerat
-
Konfigurera wifi och Internetanslutning
-
wifi password
-
starta och testa webbrowsern 'chromium'
-
-
Spela
-
Koda
-
I chromiums startsida (search engine), sök: vbos70 KodKlubben
-
Ladda ner '.zip' fil
Klicka "Clone or download" och välja "Download zip"
-
Extrahera filen
-
Öppna Python kod i Thonny Python IDE
-
Köra Python kod
-