Toon posts:

Formule raadsel oplossen met python

Pagina: 1
Acties:

Onderwerpen

Vraag


  • 1993scarlet
  • Registratie: Juni 2020
  • Laatst online: 08-03 15:06
Mijn vraag :
Ik heb sinds enkele weken mijn eerste pythonstappen gezet .
Met de eenvoudige dingen die ik al geleerd heb heb ik geprobeerd een programma te schrijven om een raadsel op te lossen uitgaande van een bepaalde formule.
De eerste ingave van variabelen gaven de juiste oplossing maar bij de derde kreeg ik een fout antwoord. Ik heb alles al diverse malen herschreven maar ik vindt de fout niet. Ik vermoed echter dat er een probleem is met een voorloopnul die iets in de war stuurt.
Is er iemand die ziet waar ik misschien een fout gemaakt heb en/of hoe het op te lossen is?
Het uitgangspunt is : je hebt een jaargetal van 01 tot 99 (bv.46) en een getal dat begint met een 2. ( bv. 2096436058700).
Als ik 46% bereken van 2096436058700 moet ik dezelfde cijfers bekomen maar met de 2 verschoven naar de laatste plaats. Dat wordt dan 964360587002.
De berekening is afhankelijk van een aantal nullen dat men bij moet gebruiken na het eerste getal.

Zie hierbij wat ik geschreven heb en welke oplossingen ik kreeg.
Y = 2 en X = andere cijfers van het getal


De gegevens voor de twee juiste berekeningen zijn : jaar 55 - nullen 5 en jaar 46 - nullen 12
De gegevens waarbij het fout zit zijn : jaar 32- nullen 21


Y = 2
jaar = 32
nul = 21
teller = Y * ( jaar * pow(10, nul) - 100 )
noemer = (1000 - jaar)
print("Het gevraagde getal YX is:", (( Y * pow(10, nul))) + (int (teller // noemer )))
print("Het gevraagde getal YX *", jaar, " % is getal XY :", (int((( Y * pow(10, nul)) + (int(teller / noemer))) * jaar/100 )))

pythonoplossing:

Het gevraagde getal YX is: 211640
Het gevraagde getal YX * 55 % is getal XY : 116402
>>>
= RESTART:
Het gevraagde getal YX is: 2096436058700
Het gevraagde getal YX * 46 % is getal XY : 964360587002
>>>
= RESTART:
Het gevraagde getal YX is: 2066115702479338842975
Het gevraagde getal YX * 32 % is getal XY : 661157024793388384256


De juiste oplossing voor het laatste deel zou moeten zijn :

2066115702479338842975 * 32 % = 661157024793388429752

Heeft iemand een ideetje ?

Relevante software en hardware die ik gebruik
...Mac OS

Wat ik al gevonden of geprobeerd heb
...

Alle reacties


  • 1993scarlet
  • Registratie: Juni 2020
  • Laatst online: 08-03 15:06
@ Heuveltje : alles staat nochtans al vermeld.

-Achtergrond : het is gewoon een wiskundige eigenaardigheid , niet meer of minder.
-46% pakken zoals je het noemt : de variabele "jaar" geeft dit percentage aan en kan van 00 tot 99 gaan. De voorbeelden die ik gaf hebben het bv. over 55% ( jaar(19)55 , over 46% (19)46 en 32% (jaar19)32 maar kan dus elk jaartal zijn tussen 00 en 99.
-de naam van de variabelen is toch duidelijk : jaar is het laatste deel van het jaartal ,
nul is het aantal nullen dat men in de formule moet gebruiken , teller is de formule die je de teller geeft en noemer is de formule die je de noemer geeft.
- Y is zoals gezegd het eerste deel van een getal (hier 2) en X de andere cijfers ( hier in het eerst opgeloste geval bv. 11640) dus in dit geval is YX 211640 en XY 116402.
-en variabele "nul" noemen ? Waarom niet , die "nul" wordt op alle plaatsen gebruikt als het getal dat het moet voorstellen bv in het voorbeeld bovenaan bij het jaar (19)32 als 21.
-in de 3 uitgewerkte voorbeelden komt "nul" voor als 5 ( bij 55%) , als 12 (bij 46%) of als 21 bij 46%. Maar dat heeft verder geen belang want het klopt in de formule.Je past het cijfer gewoon aan in de variabele.
-machtverheffing :de machtverheffing (10, 21) dient natuurlijk op Y de juiste plaats te geven vooraan in het getal. Bij de 2 andere voorbeelden is bv. pow(10, 5) en pow(10.12) gebruikt.
-wat ben je aan het berekenen? : gewoon 2 getallen die aan een bepaalde voorwaarde voldoen namelijk dat men bij een percentage van het eerste het tweede getal bekomt met verschuiving van de 2 van voor naar achter.
-klopt die formule : De eerste twee uitgewerkte voorbeelden geven aan dat de volgorde XY en YX kloppen en dat dus de formule juist is. Als ik met een rekenmachine alle jaartallen bereken dan kloppen ze allemaal.
Bereken met een eenvoudig getal maar eens Y * (5500000-100) = (1000-55)X
dus 10999800Y = 945 X dus X is 11640. Y is 2 dus YX is 211640 en XY is 55% daarvan of 116402

Ik hoop dat hiermee al je vragen beantwoord zijn ?

  • 1993scarlet
  • Registratie: Juni 2020
  • Laatst online: 08-03 15:06
@ Ben(V)

dit is hetgeen ik gebruikt heb :

Y = 2
jaar = 32
nul = 21
teller = Y * ( jaar * pow(10, nul) - 100 )
noemer = (1000 - jaar)
print("Het gevraagde getal YX is:", (( Y * pow(10, nul))) + (int (teller // noemer )))
print("Het gevraagde getal YX *", jaar, " % is getal XY :", (int((( Y * pow(10, nul)) + (int(teller / noemer))) * jaar/100 )))

of bedoel je iets anders met "de code" en waar vindt ik die dan ?

  • 1993scarlet
  • Registratie: Juni 2020
  • Laatst online: 08-03 15:06
@ Ben(V)
Nee , dat is verkeerd begrepen.
Hoeveel runs ik ook doe de uitkomst is altijd dezelfde :

Het gevraagde getal YX is: 2066115702479338842975
Het gevraagde getal YX * 32 % is getal XY : 661157024793388384256
>>>
= RESTART: /
Het gevraagde getal YX is: 2066115702479338842975
Het gevraagde getal YX * 32 % is getal XY : 661157024793388384256

dus die oplossing komt niet overeen met het gevraagde.

maar als ik de formule handmatig bereken kom ik tot het juiste resultaat :
2066115702479338842975 * 32 % = 661157024793388429752 (tot deze oplossing komt Ben(V) ook)
dus de fout moet volgens mij ergens in het tweede gedeelte van die code zitten.

Ik gebruik python 3.8.3 op een iMac met macOS.
Het zal waarschijnlijk ergens in die delingen zitten ( in versie 2 is / gelijk aan // in versie 3 blijkbaar)
en in afrondingen en integers maar na enkele weken ben ik nog niet zo goed dat ik er die uit kan halen.
Ik heb ook al geprobeerd de vermelding (int) en / en // te vervangen maar ik kom nooit tot het juiste resultaat.

Ik heb nog even de berekening handmatig gedaan :
Y * (32000000000000000000000 - 100) = (1000 - 32) X
Y * (31999999999999999999900) = (968)X
(63999999999999999999800) = (968)X
X = (63999999999999999999800/968
X = 66115702479338842975
dus de oplossing zou zijn :YX = 266115702479338842975 en XY = 661157024793388429752
maar daar zit dus een foutje in dat python misschien niet kan zien denk ik want er is na de 2 van YX een voorloopnul nodig in dit geval om de rekening te laten kloppen.
want 266115702479338842975 x 32 % = 85157024793388429752 en dus fout
De juiste oplossing is 2066115702479338842975 x 32% = 661157024793388429752

Maar in de berekening van Ben(V) geeft python blijkbaar wel een goed antwoord,maar hoe lukt dat in mijn versie.

[Voor 28% gewijzigd door 1993scarlet op 08-07-2020 16:47]


Acties:
  • +1Henk 'm!

  • 1993scarlet
  • Registratie: Juni 2020
  • Laatst online: 08-03 15:06
@ KabouterSuper & Glowmouse

Geweldig, het werkt met decimal.

Het gevraagde getal YX is: 2066115702479338842975
Het gevraagde getal YX * 32 % is getal XY : 661157024793388429752

Al ben ik een heel eind in de zeventig , bijleren geeft altijd weer een prettg gevoel.

Heel hartelijk bedankt aan iedereen die geholpen heeft.

  • 1993scarlet
  • Registratie: Juni 2020
  • Laatst online: 08-03 15:06
@ KabouterSuper

Die 1993 laat wel meer mensen denken dat het mijn geboortejaar is .
Soms wil je dat wel want er is nog zoveel bij te leren in je leven maar aan de andere kant ben ik best tevreden met mijn echte leeftijd.
De achtergrond van het probleem ( ik zou het wel geen probleem noemen ).
Een vriend vroeg me eens een puzzel op te lossen waarbij je dus uitgaande van je geboortejaar en een voorloopgetal , bv 2 ( maar soms kan het ook met 4 of een ander getal ) je twee getallen kreeg waarbij je met het percentage van je geboortejaar toe te passen op het ene getal het andere bekwam met dat voorloopgetal achteraan.
Het was wel een beetje een gemene opdracht want ik kwam er achter dat ik voor mijn geboortejaar een getal moest krijgen van 952 cijfers.
Handmatig zit je daar natuurlijk dagen aan te werken met een online bigintegercalculator maar ik vond een erg hulpvaardige man die goed thuis was in de computertaal Python en die maakte me een lijstje van jaar 00 tot 99 met daarachter het aantal nullen dat ik in de formule moest gebruiken. Met dat gegeven erbij was het vrij eenvoudig en snel om het getal uit te rekenen.
Die brave man wekte hierbij ook mijn belangstelling om eens uit te puzzelen wat je zo nog meer kon met python en zodoende ben ik enkele weken geleden begonnen met uit een onlineboek de eerste stappen te leren. Om wat met die eerste indrukken te oefenen probeerde ik dus de formule van dat raadsel eens om te zetten in pythontaal. Dat lukte voor de kleinere getallen wel maar mijn kennis is nog teveel beperkt om te weten dat je met integers en decimalen moet uitkijken. En dat heb ik nu dus weer bijgeleerd.

Voor een wiskundige zal het allemaal natuurlijk heel eenvoudig klinken maar gelukkig helpen die wiskundigen ook anderen aan de oplossing van zo'n eenvoudig "probleempje".

  • 1993scarlet
  • Registratie: Juni 2020
  • Laatst online: 08-03 15:06
Goeiemorgen KabouterSuper,

alweer iets bijgeleerd . Die E-notatie komt inderdaad regelmatig voor.

En die leeftijden ,toch prettig als je met wiskunde en (priem)getallen kan spelen.

Nog één ( misschien dom) vraagje :
Als ik programmagegevens in zo'n topic zet of run dan zie ik enkel maar de gegevens.
Als jullie hetzelfde doen dan zie ik vooraan altijd een kolom met de nummering van de lijnen en dat lijkt me wel handig.
Kan ik ergens in python aanpassen om ook die nummering te zien te krijgen ?

Dank bij voorbaat 🤝

  • 1993scarlet
  • Registratie: Juni 2020
  • Laatst online: 08-03 15:06
Bedankt Ben(V) , maar er loopt blijkbaar iets mis want ik krijg de melding "invalid syntax"

Zie hierbij hoe ik het gedaan heb :


code:
1
2
3
4
5
6
7
8
9
10
from decimal import Decimal

Y = 2
jaar = 32
nul = 21
teller = Decimal(Y * ( jaar * pow(10, nul) - 100 ))
noemer = Decimal(1000 - jaar)

print("Het gevraagde getal YX is:", (( Y * pow(10, nul))) + (Decimal(teller / noemer )))
print("Het gevraagde getal YX *", jaar, " % is getal XY :", (Decimal((( Y * pow(10, nul)) + (Decimal(teller / noemer))) * jaar/100 )))

  • 1993scarlet
  • Registratie: Juni 2020
  • Laatst online: 08-03 15:06
@ Ben (V)

Vervolg van mijn antwoord.
Ik zie nu dat die nummering wel in mijn reactie verschijnt. Dus het lijkt wel te werken.
Maar ik dacht dat die nummering misschien ook na "run" in IDLE zou staan , maar dat blijkt dus niet te zijn.
Dat zou interessant zijn want soms geeft men op dat er een fout zit in "line xx "

  • 1993scarlet
  • Registratie: Juni 2020
  • Laatst online: 08-03 15:06
@ KabouterSuper & Ben(V)

Ik heb 3.8.3 en in de rechteronderhoek van het IDLE venster staan inderdaad de lijnnummers.

via menu/options/show line numbers kan je die nummers ook éénmalig voor de coderegels laten verschijnen.

Eenvoudiger nog. Via preferences/general/show line numbers aan te vinken komen de lijnnummers permanent in al je vensters staan.

🤝
Pagina: 1



Google Pixel 7 Sony WH-1000XM5 Apple iPhone 14 Samsung Galaxy Watch5, 44mm Sonic Frontiers Samsung Galaxy Z Fold4 Insta360 X3 Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2022 Hosting door True

Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee