In het euclidisch vlak bereken je als volgt de afstand tussen twee punten $$P(x_1,y_1)$$ en $$Q(x_2,y_2)$$: \[d(P,Q)=\sqrt{(x_2-x_1)^2 + (y_2-y_1)^2}\]
Het hoofdprogramma vraagt dus de coördinaten van 3 punten. Het eerste punt is het middelpunt van een cirkel, het tweede punt een punt op die cirkel
en het 3e punt een testpunt waarvan we willen controleren of het binnen, buiten of op de cirkel ligt.
Het hoofdprogramma print een boodschap op het scherm die aangeeft waar het 3e punt ligt ten opzichte van de gegeven cirkelen en geeft, op een nieuwe lijn,
ook de afstand van het testpunt tot het middelpunt (op 4 cijfers na de komma).
De gebruiker geeft de volgende 3 lijnen met getallen op
0 0 1 1 -1 -1
Het programma schrijft de volgende 2 lijnen op het scherm:
Het punt (-1, -1) ligt op de cirkel bepaald door (0, 0) en (1, 1) d(P,M) = 1.4142
De gebruiker geeft de volgende 3 lijnen met getallen op
17 31 -10 6 -6 26
Het programma schrijft de volgende 2 lijnen op het scherm:
Het punt (-6, 26) ligt binnen de cirkel bepaald door (17, 31) en (-10, 6) d(P,M) = 23.5372
Om een (input)string t met getallen, gescheiden door een spatie, om te zetten naar een tuple met gehele getallen, kan je als volgt te werk gaan:
t = input() a = tuple(int(x) for x in t.split())
De variabele a bevat dan een tuple met daarin de afzonderlijke getallen van op de input-lijn. Om dit te bereiken hebben we gebruik gemaakt van de zogenaamde 'for-lus op 1 lijn' in Python. Met deze 'for-lus op 1 lijn' kan je, zoals de naam zegt, een for-lus programmeren op 1 lijn. Je kan hetzelfde vanzelfsprekend ook doen door meerdere lijnen te gebruiken, zoals we gezien hebben in het hoofdstuk van de for-lus, maar deze manier is vaak handig en compact om korte conversies te doen. We leggen hier kort even uit hoe dit werkt.
De 'for-lus op 1 lijn' werkt steeds op de items in een list en geeft als resultaat ook steeds een list terug. En aangezien een string ook als een list kan beschouwd worden, kunnen we dit hier ook gebruiken.
De syntax van deze 'for-lus op 1 lijn' is als volgt:
[ doe_iets_met_a for a in list_met_gegevens]
Dus in ons geval zal de methode t.split() een list teruggeven met daarin de getallen van op de input-lijn (als string). De split()-methode splitst immers een string op basis van een scheidingsteken (= een spatie tenzij anders opgegeven). Deze getallen als string moeten echter nog omgezet worden naar gehele getallen (int), dus
[int(x) for x in t.split()]
geeft een list terug met de gehele getallen van op de input-lijn.
Vervolgens gebruiken we de functie tuple() om deze list om te zetten naar een tuple.