Diskussion:Python: Skillnad mellan sidversioner

Från Wikiskola
Hoppa till navigering Hoppa till sök
 
Rad 25: Rad 25:


[https://sites.google.com/skola.malmo.se/programmeringsfortbildning/ Matematisk programmering i Python]
[https://sites.google.com/skola.malmo.se/programmeringsfortbildning/ Matematisk programmering i Python]
'''Klar'''. Här har jag vaskat fram de flesta använbara uppgifterna.


== mattesnille ==
== mattesnille ==

Nuvarande version från 1 april 2018 kl. 19.02


Här lägger vi in länkar till kod som kan utvecklas till lektionssidor.

Länkar till fri kod som kan omvandlas till sidor

https://www.w3resource.com/python-exercises/python-basic-exercise-58.php summan av de första n heltalen

https://www.w3resource.com/python-exercises/python-basic-exercise-32.php least common multiple

https://www.w3resource.com/python-exercises/python-basic-exercise-31.php greatest common divisor

Skolverkets exempel

https://www.skolverket.se/polopoly_fs/1.268355!/Uppgifter_workshop_programmering_gymnasiet.pdf

Från

https://www.skolverket.se/skolutveckling/resurser-for-rån/itiskolan/webbinarier/konferens-om-programmering-i-matematik-vt-2018-1.268347

Linjära ekvationssystem med kod från Malmö stads kurs där det finns mer. Och CC. https://larportalen.skolverket.se/LarportalenAPI/api-v2/document/path/larportalen/material/inriktningar/1-matematik/Gymnasieskola/448_matematikundervisningmeddigitalaverktygII_GY/del_02/Material/Flik/Del_02_MomentA/Artiklar/MA2_Gy_02A_02_aktiviteter.docx

Malmös kurs

Matematisk programmering i Python

Klar. Här har jag vaskat fram de flesta använbara uppgifterna.

mattesnille

https://mattesnille.wordpress.com/2018/03/15/programmering/

Yatzy

https://repl.it/@larsakenorden/yatzy

På matematikbiennalen nyligen så gav Johan Falk en presentation om digitala verktyg och programmering. Han gav då följande exempel på uppgift som kan lösas genom programmering:

Vad är sannolikheten att slå Yatzy? (Det vill säga att få fem lika tärningar efter tre slag, där du själv väljer vilka tärningar du behåller respektive slår om mellan varje slag.)

Bra exempel, tänkte jag. Så igår i ett ögonblick av experimentlusta satte jag mig ner och kodade ihop ett program som gör precis detta (efter ungefär den algoritm som Johan presenterade). Kastar fem tärningar, sparar dem som jag har flest av och kastar igen. Räknade ut hur många gånger jag fick Yatzy och finner att jag får en tillräckligt liten varians för att det skall kännas statistiskt övertygande.

Bra så, tänker jag. Och bara för min egen tillfredsställelse dubbelkollade jag mot det analytiska svaret.

Stort misstag. Inte samma svar.

Jag får inte samma svar vid simulering som vid analys. Något är fel. Ryggmärgsreaktionen är att skylla på slumpfunktionen, men det är ju bara naivt.

Efter ett tag går det upp för mig. Det finns fler sätt att faktiskt få Yatzy. Om du efter ett kast har 4 stycken ettor och en sexa så är det normala att spara ettorna och hoppas på att få en etta på den sista tärningen. Men du kunde lika gärna ha sparat sexan och hoppas på att få fyra sexor i nästa kast. Bägge ger Yatzy, men i simuleringen räknar vi bara med det första fallet.

Gott så, bara att modifiera programmet lite grann då. Och där körde jag fast.

Så jag undrar om det är någon som har lyckats skriva ett program som faktiskt ger rätt svar på sannolikheten att få Yatzy genom simulering? Eller om någon har ett förslag på hur man skall ta sig an det annat än att börja simulera utfallsträd? Och då helst på ett sätt som faktiskt är praktiskt genomförbart för en gymnasial nivå.

Malmös kod

import random

def flest(T):
    antal = [0,0,0,0,0,0]
    for item in T:
        if item == 1:
            antal[0] = antal[0] + 1
        elif item == 2:
            antal[1] = antal[1] + 1
        elif item == 3:
            antal[2] = antal[2] + 1
        elif item == 4:
            antal[3] = antal[3] + 1
        elif item == 5:
            antal[4] = antal[4] + 1
        else:
            antal[5] = antal[5] + 1
    m = max(antal)
    index = antal.index(m)
    return index + 1

yatzy = 0
antalForsok = 100000

for i in range(antalForsok):

    t = [random.randint(1,6),random.randint(1,6),random.randint(1,6),random.randint(1,6),random.randint(1,6)]

    for j in range(0,2):
        f = flest(t)
        for i in range(5):
            if t[i] != f:
                t[i] = random.randint(1,6)

    if (t[0] == t[1] and t[1] == t[2] and t[2] == t[3] and t[3] == t[4]):
        yatzy = yatzy + 1

print('Sannolikheten för Yatzy! är '+ str(round(yatzy/antalForsok*100,2))+' %.')