Archief - [PROG]TP <=> Python Analogien

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Didius

Legacy Member
Goeiemidag


Jullie weten wel dat turbo pascal nog altijd veel gebruikt wordt in het middelbaar om de leerlingen "probleem oplossend" denken aan te leren.

Ik zoek daarvoor echter een alternatief. Er moet toch iets beter bestaan dan TP (lees moderner) maar toch even leesbaar.

Sommige scholen gebruiken Javascript. Vind ik wel modern(er) maar toch niet even leesbaar als TP.


Ik ben echter python aangeraden, en dat bevalt me goed. Het lijkt ook heel leesbaar. Ik zit echter wat in de problemen ermee. Bepaalde zaken moeten namelijk aangeleerd worden (volgens het leerplan). Zoals oplossen in deelproblemen.
In pascal als volgt:
Code:
PROGRAM naamvanhetprogramma;
VAR globale variabelen;

PROCEDURE Deelprobleem1;
VAR lokale variabelen;
BEGIN
END;
PROCEDURE Deelprobleem2;
BEGIN
END;

BEGIN
   Deelprobleem1;
   Deelprobleem2;
END.

Ik weet echter niet echt hoe zoiets eruitziet in python; iets als volgt?
Code:
def Deelprobleem1:
  instructies

def Deelprobleem2:
   instructies

Deelprobleem1
Deelprobleem2
Ook heel leesbaar, maar hoe zit het met de declaraties van globale en lokale variabelen hier?

thnx

Tyfius

Legacy Member
Ik heb nu niet veel tijd en het zit zeer ver weg, maar een klein voorbeeldje:
Code:
#!/usr/local/bin/python

# Variable scope

first = 1

def one():
    "Double a global variable, return it + 3."
    global first
    first *= 2
    result = first+3
    return result

print one.__doc__
print one()
print one()
print one()
print "first now has the value",first
print "result has the value",result

Messias.

Legacy Member
Python is ge-wel-dig. Goeie keuze, vooral in combinatie met IDLE, de live interpreter voor, Python is dat een geweldig leerinstrument.

Met het keyword def maak je inderdaad nieuwe functies/procedures aan. Ik ken geen woord TP, maar wat betreft variabelen: Python is net een dynamisch getypeerde taal en ontworpen om zoveel mogelijk boilerplate code te omzeilen. Een nieuwe variabele aanmaken is zo eenvoudig als:
Code:
tekst = "Dit is een string."
x = 9 #dit is een integer
y = 3.14 #dit is een float

De interpreter bepaalt zelf welk soort type de variabele is. Dit heeft aantal voordelen en nadelen, maar voor eenvoudige programma's zijn geen van beide van belang.

Ook moet je beseffen dat identatie een essentieel syntactisch element is van de taal. Een tab verkeerd plaatsen en je ligt overhoop met de interpreter. IDLE enzo plaatsen meestal wel zelf tabs waar nodig, maar bijvoorbeeld voor branching bij if/else, zal je je leerlingen wel moeten uitleggen dat de enkel de code die geindenteerd is zonder één van de takken wordt uitgevoerd als de voorwaarde voldaan is.

Tyfius zei:
Code:
# Variable scope

first = 1

def one():
    """Double a global variable, return it + 3."""
    global first
    first *= 2
    result = first+3
    return result

print one.__doc__
print one()
print one()
print one()
print "first now has the value",first
print "result has the value",result

Even toelichten. Elke functie heeft standaard de .__doc__ member en die bevat de documentatiestring van de de functie. Ik denk echter dat Tyfius een typfoutje gemaakt heeft, want de documentatiestring begint en eindigt altijd met 3 aanhalingstekens. Door die member aan te roepen print je dus de tekst

Double a global variable, return it + 3.

Didius

Legacy Member
Enkele zaken (ivm die variabelen, en indentaties) wist ik wel al, maar toch bedankt voor de informatie ;)
Wat is boilerplate code trouwens?

Die .__doc__ member is idd wel handig! Iets dat ik ga onthouden :niceone:

Tyfius zei:
# Variable scope

first = 1

def one():
"""Double a global variable, return it + 3."""
global first, result
first *= 2
result = first+3
return result

print one.__doc__
print one()
print one()
print one()
print "first now has the value",first
print "result has the value",result
Moet die result ook niet na die global staan? Anders wordt hier compilatie fout gegeven.

Maar die variabelen zijn nog niet echt duidelijk.

Bijvoorbeeld (de typische BMI oefening ;) ):
Code:
def vraagGewichtEnLengte():
   global gewicht, lengte
   gewicht = input('Geef je gewicht: ')
   lengte = input('Geef je lengte: ')

def berekenBMI():
   global bmi
   bmi = gewicht/(lengte*lengte)

def schrijfBMI():
   print "Bmi is ", bmi

vraagGewichtEnLengte()
berekenBMI()
schrijfBMI()
Dat werkt perfect maar die declaratie van die variabelen is precies zo, tja "anders" vergeleken met TP. Of misschien doe ik het fout?
Bij elke deelprobleem apart de variabelen globaal declareren, terwijl dit in TP boveaan het programma moet (wat we logisch(er) is, aangezien het globaal is)
Hoe zou dat programma trouwen opgesteld moeten worden indien er gewerkt wordt met parameters? Misschien krijg ik dan wat meer inzicht in de structuur.

BTW: ik dacht om drpython (op ubuntu) te gebruiken als editor. Die laat zowel de interactieve modus toe, en het is ook gemakkelijk om .py bestanden te compileren.

Tyfius

Legacy Member
Ik dacht dat je je variabelen ook wel globaal moest declareren, zoals ik met die first doe. In het deelprogramma maak ge via de global dan gewoon bekend dat dit een globale variabele is.
Ik heb in geen jaren nog python aangeraakt though, ben niet echt meer een referentie :)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan