[Python] snap stukje code niet (absolute beginner)

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Spasm
  • Registratie: Juni 2001
  • Laatst online: 18:11
Hallo allen,

Ik ben begonnen om via LearnPython.org proberen te leren programmeren in Python.

Ik ben bij het hoofdstuk Loops beland en bij één van de voorbeelden staat de volgende
code:

code:
1
2
3
4
5
6
for i in range(1, 10):
    if i % 5 == 0:
        break
        print(i)
else:
    print("this is not printed because for loop is terminated because of break but not due to fail in condition")


Edit
Geloof dat ik het snap. 5 gedeeld door 5 = 0 vandaar de break ?

Hoewel het op dit punt van de lessen waarschijnlijk nog niet relevant is, probeer ik te begrijpen hoe ik deze regel moet lezen:

code:
1
if i % 5 == 0:


Ik zie wat het doet, maar begrijp niet waarom.

Kan iemand mij daar duidelijkheid over verschaffen misschien ?

[ Voor 5% gewijzigd door Spasm op 06-11-2020 16:16 ]

Random WTF

Beste antwoord (via Spasm op 06-11-2020 16:12)


  • iBugged
  • Registratie: Juni 2014
  • Laatst online: 19:39
Dat %-teken is de modulo, waarmee je berekent wat de restwaarde is als je (in jouw geval) i deelt door 5. Wanneer dus de restwaarde 0 is (bij i = 5), breakt de if.

Alle reacties


Acties:
  • Beste antwoord
  • +3 Henk 'm!

  • iBugged
  • Registratie: Juni 2014
  • Laatst online: 19:39
Dat %-teken is de modulo, waarmee je berekent wat de restwaarde is als je (in jouw geval) i deelt door 5. Wanneer dus de restwaarde 0 is (bij i = 5), breakt de if.

Acties:
  • 0 Henk 'm!

  • GarBaGe
  • Registratie: December 1999
  • Laatst online: 14:56
Wat doet het dan? Volgens jou?
En waarom snap je dat niet?

Je code is ook niet zo best.
De else hoort bij de if, maar lijkt wegens indent alsof hij bij de for hoort.

Ryzen9 5900X; 16GB DDR4-3200 ; RTX-4080S ; 7TB SSD


Acties:
  • +2 Henk 'm!

  • iBugged
  • Registratie: Juni 2014
  • Laatst online: 19:39
GarBaGe schreef op vrijdag 6 november 2020 @ 16:13:
Wat doet het dan? Volgens jou?
En waarom snap je dat niet?

Je code is ook niet zo best.
De else hoort bij de if, maar lijkt wegens indent alsof hij bij de for hoort.
Nee, de else hoort bij de for-loop, dat kan blijkbaar in Python: https://book.pythontips.c...r_-_else.html#else-clause ;)

Acties:
  • +1 Henk 'm!

  • jammo
  • Registratie: November 2020
  • Laatst online: 10:16
op https://en.wikipedia.org/wiki/Modulo_operation wat meer informatie over demodulo
Je code is ook niet zo best.
De else hoort bij de if, maar lijkt wegens indent alsof hij bij de for hoort.
In dit geval hoort de else ook bij de for

edit:
In Python kan een else bij een for staan, deze wordt dan uitgevoerd in het geval dat de for loop 'niks' doet

[ Voor 18% gewijzigd door jammo op 06-11-2020 16:19 ]


Acties:
  • 0 Henk 'm!

  • Spasm
  • Registratie: Juni 2001
  • Laatst online: 18:11
GarBaGe schreef op vrijdag 6 november 2020 @ 16:13:
Wat doet het dan? Volgens jou?
En waarom snap je dat niet?
Omdat ik de uitleg over de modulus operator even vergeten was. Deze was achteraf gezien toch ter sprake gekomen bij eerdere oefeningen.

Random WTF


Acties:
  • 0 Henk 'm!

  • Spasm
  • Registratie: Juni 2001
  • Laatst online: 18:11
iBugged schreef op vrijdag 6 november 2020 @ 16:11:
Dat %-teken is de modulo, waarmee je berekent wat de restwaarde is als je (in jouw geval) i deelt door 5. Wanneer dus de restwaarde 0 is (bij i = 5), breakt de if.
Bedankt voor de uitleg. Was al wel ter sprake gekomen tijdens de opdrachten maar had het even verdrongen blijkbaar :)

Vind het nog best lastig. Heb jaren geleden in CA Clipper geprogrammeerd en red met ook aardig met AutoHotkey, maar deze syntax is behoorlijk anders.

Random WTF


Acties:
  • +1 Henk 'm!

  • GarBaGe
  • Registratie: December 1999
  • Laatst online: 14:56
iBugged schreef op vrijdag 6 november 2020 @ 16:16:
[...]


Nee, de else hoort bij de for-loop, dat kan blijkbaar in Python: https://book.pythontips.c...r_-_else.html#else-clause ;)
Oh, wow.
Een else aan een for hangen. Heb ik ook nog wat geleerd...

Ryzen9 5900X; 16GB DDR4-3200 ; RTX-4080S ; 7TB SSD


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Moet die print niet boven de break staan :? Zo slaat het als voorbeeld helemaal nergens op.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • DataGhost
  • Registratie: Augustus 2003
  • Laatst online: 17:31

DataGhost

iPL dev

drm schreef op zondag 8 november 2020 @ 18:04:
Moet die print niet boven de break staan :? Zo slaat het als voorbeeld helemaal nergens op.
Ik denk dat 'ie juist een tabje naar links hoort, zodat de output "1 2 3 4" wordt, of boven de if voor "1 2 3 4 5"

Edit: als ik op learnpython.org kijk staat 'ie inderdaad eentje verder naar links.

[ Voor 13% gewijzigd door DataGhost op 08-11-2020 18:10 ]


Acties:
  • 0 Henk 'm!

  • Spasm
  • Registratie: Juni 2001
  • Laatst online: 18:11
DataGhost schreef op zondag 8 november 2020 @ 18:09:
[...]

Ik denk dat 'ie juist een tabje naar links hoort, zodat de output "1 2 3 4" wordt, of boven de if voor "1 2 3 4 5"

Edit: als ik op learnpython.org kijk staat 'ie inderdaad eentje verder naar links.
Klopt. Beetje slordige copy/paste van mijn kant.

Random WTF


Acties:
  • +1 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Spasm:
Klopt. Beetje slordige copy/paste van mijn kant.
Goeie reden om nooit meer python code te copy/pasten, dan ;)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • +2 Henk 'm!

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 20:14
drm schreef op zondag 8 november 2020 @ 19:23:
[...]
Goeie reden om nooit meer python code te copy/pasten, dan ;)
Is Python nu de nieuwe PHP geworden ofzo? 8)7

@Spasm De reactie van @drm sloeg gewoon nergens op. Als iemand python wil gebruiken dan is dat gewoon ok.

[ Voor 21% gewijzigd door Caelorum op 09-11-2020 11:53 ]


Acties:
  • 0 Henk 'm!

  • Spasm
  • Registratie: Juni 2001
  • Laatst online: 18:11
Caelorum schreef op maandag 9 november 2020 @ 09:50:
[...]

Is Python nu de nieuwe PHP geworden ofzo? 8)7
Ik had niet het rechtstreeks uit de tutorial gekopieerd, netjes overgetypt in PyCharm.
Daarna ging het blijkbaar even mis met copy/paste
uit PyCharm op Tweakers.

Random WTF


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Caelorum:
Is Python nu de nieuwe PHP geworden ofzo? 8)7

@Spasm De reactie van @drm sloeg gewoon nergens op. Als iemand python wil gebruiken dan is dat gewoon ok.
Bijzonder staaltje invulkunde dit... Is ironie helemaal niet aan je besteed of ben je gewoon een beetje overgevoelig? De opmerking sloeg natuurlijk wel ergens op, namelijk op significant whitespace wat toch vooral en slechts in Python een dingetje is en blijkbaar met copy-pasten mis kan gaan. De opmerking beoogt niet meer dan in dat opzicht een kleine waarschuwing te geven. Hoe je dit weet te vertalen naar het bashen van python zegt volgens mij vooral iets over wat jij erin wilt lezen.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • +1 Henk 'm!

  • bwerg
  • Registratie: Januari 2009
  • Niet online

bwerg

Internettrol

Algemene tip: als je niet weet wat een taalconstructie/operator doet, probeer dat ding dan even in isolatie uit. Als je
Python:
1
2
3
4
5
6
4%3
3%3
2%3
1%3
0%3
-1%3

in een python-CLI gooit snap je meteen wat het doet. Een dergelijk simpel voorbeeldje voor de for-else wie heeft dat in godsnaam bedacht is ook wel te bedenken.

Een debugger is ook niet verkeerd om te leren gerbuiken. Beginnen veel mensen pas laat mee en het komt in cursussen ook verrassend weinig aan bod, terwijl het niet gek is om dat als één van de eerste dingen te leren. Veel makkelijker om te visualiseren wat een stukje onbekende code doet. Al heb ik geen ervaring met python-debuggers maar die zijn er vast.

Heeft geen speciale krachten en is daar erg boos over.


Acties:
  • +1 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 20:56

MueR

Admin Tweakers Discord

is niet lief

drm schreef op maandag 9 november 2020 @ 16:04:
[...]
Bijzonder staaltje invulkunde dit... Is ironie helemaal niet aan je besteed of ben je gewoon een beetje overgevoelig? De opmerking sloeg natuurlijk wel ergens op, namelijk op significant whitespace wat toch vooral en slechts in Python een dingetje is en blijkbaar met copy-pasten mis kan gaan. De opmerking beoogt niet meer dan in dat opzicht een kleine waarschuwing te geven. Hoe je dit weet te vertalen naar het bashen van python zegt volgens mij vooral iets over wat jij erin wilt lezen.
Och, er is nog altijd een quote die ik graag aanhaal.. "If whitespace is relevant in your programming language, your programming language is irrelevant".

Ik heb echt een grafhekel aan python. Niet omdat het perse een slechte taal is, maar omdat het zich bemoeit met hoe ik mijn code wil formatteren.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • Ben(V)
  • Registratie: December 2013
  • Laatst online: 19:53
Python whitespacing regels zorgen er in iedere geval voor dat alle code in ieder geval een beetje leesbaar is.

Heb je wel eens geprobeerd om bijvoorbeeld C code zonder begrijpbare spacings te lezen?

All truth passes through three stages: First it is ridiculed, second it is violently opposed and third it is accepted as being self-evident.


Acties:
  • 0 Henk 'm!

  • Yucon
  • Registratie: December 2000
  • Laatst online: 19:12

Yucon

*broem*

Wat is de gedachte achter zo'n rare for/else constructie? Waarom zou je niet gewoon in de loop een vlaggetje omzetten en dan breaken, en na de loop met een if statement op het vlaggetje checken?

Acties:
  • 0 Henk 'm!

  • diabolofan
  • Registratie: Mei 2009
  • Laatst online: 08:46
Ben(V) schreef op vrijdag 20 november 2020 @ 12:32:
Heb je wel eens geprobeerd om bijvoorbeeld C code zonder begrijpbare spacings te lezen?
Dit lost je editor met een simpele format toch op?
Yucon schreef op vrijdag 20 november 2020 @ 12:53:
Wat is de gedachte achter zo'n rare for/else constructie? Waarom zou je niet gewoon in de loop een vlaggetje omzetten en dan breaken, en na de loop met een if statement op het vlaggetje checken?
Nou, dat vlaggetje heb je dan wellicht niet nodig ;) Waarom bestaat er een else-if, terwijl je ook gewoon in de else weer een nieuwe if-else zou kunnen maken?

Acties:
  • 0 Henk 'm!

  • Yucon
  • Registratie: December 2000
  • Laatst online: 19:12

Yucon

*broem*

diabolofan schreef op vrijdag 20 november 2020 @ 14:26:
[...]

Waarom bestaat er een else-if, terwijl je ook gewoon in de else weer een nieuwe if-else zou kunnen maken?
Dat heb ik me dan ook wel eens vaker afgevraagd :)

Het zal minimaal in performance schelen omdat je 1 vergelijking minder hoeft te maken, maar ik heb het idee dat dat voornamelijk vanwege historische redenen bestaat.

Acties:
  • 0 Henk 'm!

  • diabolofan
  • Registratie: Mei 2009
  • Laatst online: 08:46
Yucon schreef op vrijdag 20 november 2020 @ 14:34:
[...]

Dat heb ik me dan ook wel eens vaker afgevraagd :)
Maar een else heb je toch ook niet nodig, je kunt ook gewoon een if schrijven met een ! ervoor...

Ik bedoel dus meer aan te geven dat doorontwikkelende talen er steeds nieuwe keywords bijkrijgen, waardoor het voor de programmeurs makkelijker wordt om zaken absoluter of beter leesbaar te kunnen maken (wat natuurlijk verschilt per programmeur of hij het wel of geen goede toevoeging vind), waar ik dus opzich wel een voorstander van ben.

Jij lijkt daarintegen elke verandering in een programmeertaal of zaken die toegevoegd worden aan een taal waarvan jij het nut niet inziet, onnodig te vinden? :9

Acties:
  • 0 Henk 'm!

  • Yucon
  • Registratie: December 2000
  • Laatst online: 19:12

Yucon

*broem*

diabolofan schreef op vrijdag 20 november 2020 @ 15:29:
[...]


Maar een else heb je toch ook niet nodig, je kunt ook gewoon een if schrijven met een ! ervoor...

Ik bedoel dus meer aan te geven dat doorontwikkelende talen er steeds nieuwe keywords bijkrijgen, waardoor het voor de programmeurs makkelijker wordt om zaken absoluter of beter leesbaar te kunnen maken (wat natuurlijk verschilt per programmeur of hij het wel of geen goede toevoeging vind), waar ik dus opzich wel een voorstander van ben.

Jij lijkt daarintegen elke verandering in een programmeertaal of zaken die toegevoegd worden aan een taal waarvan jij het nut niet inziet, onnodig te vinden? :9
Oh, ik ga echt niet happen hoor :P Ik kan namelijk geen moment zitten met veranderingen. Sterker nog, ik juich veranderingen en verbeteringen toe maar dan wel als ze echt duidelijk voordeel hebben.

Die for/else vind ik helemaal niet makkelijker dan zo'n vlaggetje. Eerder ingewikkelder. Dus dan vind ik het niet zo sterk om het toe te voegen tenzij ik een reden over het hoofd zie.

En else if heeft op zich wel denkbare toepassingen. Meestal zie ik het echter gebruikt worden als een tweede if waarbij een tweede voorwaarde gecheckt wordt. Eentje die in de praktijk niet zal optreden als al aan de eerste voldaan is, maar tegelijkertijd ook weer zonder dat het belangrijk is dat die eerste niet optreedt omdat dat eigenlijk toch niet mogelijk is.

iets als

if kleur = rood dan 123
elseif kleur = blauw dan 456

pragmatisch gezien is

if kleur = rood dan 123
if kleur = blauw dan 456

precies evengoed.. alleen theoretisch iets minder performance door die tweede check. Maar dat zal zo vreselijk minimaal zijn dat ik praktisch gezien nauwelijks voordeel zie. Als iemand hem wil gebruiken: geen probleem hoor.. ik stelde vooral dat ik nauwelijks praktisch nut zie en daarom me afvraag of het nu echt een nuttige toevoeging is. In situaties dat het wel belangrijk is kun je prima een else gebruiken zonder dat het moeite kost.

Acties:
  • 0 Henk 'm!

  • Ben(V)
  • Registratie: December 2013
  • Laatst online: 19:53
De "for else" clause is bedoelt om iets uit te voeren als de loop helemaal doorlopen wordt en niet via een break eruit gesprongen is.
Eigenlijk had die "else" clause "nobreak" moeten heten, dat had veel verwarring voorkomen.

Persoonlijk vind ik het een bijzonder handig statement, want flow control via een flag variabele is in mijn ogen een erg lelijke optie.

Zeker als er veel code in die for loop zit, dan moet je weer gaan zoeken waar die flag precies gezet wordt en als je meerdere breaks hebt wordt zo'n flag nog wel eens vergeten.

Je krijgt dan constructies als voor de loop een flag zetten, bij elke break die flag weer resetten en na afloop van die loop weer een if statement om die flag te testen.
Niet elegant in mijn ogen.

Maar zoals met veel dingen is dit een kwestie van smaak en gelukkig kan iedereen kiezen wat hij zelf wil gebruiken.

All truth passes through three stages: First it is ridiculed, second it is violently opposed and third it is accepted as being self-evident.


Acties:
  • 0 Henk 'm!

  • Spasm
  • Registratie: Juni 2001
  • Laatst online: 18:11
Ok om het forum niet te vervuilen met een nieuw topic plaats ik hem hieronder.
Ik was bezig met een opdracht waar je afstand en tijd moet omrekenen naar kilometer
per uur.

De code werkt, maar ik wilde proberen om de uitkomst af te ronden op twee decimalen
met de functie round()

Als ik dit doe:

code:
1
print ("Speed in km per hour = %s" %round((speed_in_km_per_hour),2))


Dan wordt de uitkomst afgerond op 1 decimaal, en ik snap niet waarom ??

Volledige code:

code:
1
2
3
4
5
6
7
8
9
10
distance_in_km = float(input("distance_in_km: "))
distance_in_mtr = distance_in_km * 1000
minutes = float(input("Time in minutes: "))
seconds = float(input("Time in seconds: "))
time_in_seconds = minutes * 60 + seconds
speed_in_mtr_per_second = distance_in_mtr / time_in_seconds
speed_in_km_per_hour = distance_in_km / (time_in_seconds / 3600)
print ("Time in seconds = %s " %(time_in_seconds))
print ("Speed in meter per second = %s " %(speed_in_mtr_per_second))
print ("Speed in km per hour = %s" %round((speed_in_km_per_hour),2))

Random WTF


Acties:
  • +1 Henk 'm!

  • gekkie
  • Registratie: April 2000
  • Laatst online: 14:59
Spasm schreef op woensdag 25 november 2020 @ 13:42:
Ok om het forum niet te vervuilen met een nieuw topic plaats ik hem hieronder.
Ik was bezig met een opdracht waar je afstand en tijd moet omrekenen naar kilometer
per uur.

De code werkt, maar ik wilde proberen om de uitkomst af te ronden op twee decimalen
met de functie round()

Als ik dit doe:

code:
1
print ("Speed in km per hour = %s" %round((speed_in_km_per_hour),2))


Dan wordt de uitkomst afgerond op 1 decimaal, en ik snap niet waarom ??

Volledige code:

code:
1
2
3
4
5
6
7
8
9
10
distance_in_km = float(input("distance_in_km: "))
distance_in_mtr = distance_in_km * 1000
minutes = float(input("Time in minutes: "))
seconds = float(input("Time in seconds: "))
time_in_seconds = minutes * 60 + seconds
speed_in_mtr_per_second = distance_in_mtr / time_in_seconds
speed_in_km_per_hour = distance_in_km / (time_in_seconds / 3600)
print ("Time in seconds = %s " %(time_in_seconds))
print ("Speed in meter per second = %s " %(speed_in_mtr_per_second))
print ("Speed in km per hour = %s" %round((speed_in_km_per_hour),2))
Er zit een verschil tussen "iets afronden tot een aantal decimalen" en "het weergeven van een getal met een aantal cijfers achter de komma".
Standaard worden de laatste nullen niet getoond, dus kijken naar "string formatting" en hoe je daar kunt specificeren hoevaal decimalen er getoond worden.
Let wel dat de methode waarop bij string formatting een eventuele afronding wordt gedaan, niet geheel overeenkomt met wat je op school geleerd hebt.

[ Voor 4% gewijzigd door gekkie op 25-11-2020 13:50 ]


Acties:
  • 0 Henk 'm!

  • Spasm
  • Registratie: Juni 2001
  • Laatst online: 18:11
gekkie schreef op woensdag 25 november 2020 @ 13:48:
[...]

Er zit een verschil tussen "iets afronden tot een aantal decimalen" en "het weergeven van een getal met een aantal cijfers achter de komma".
Standaard worden de laatste nullen niet getoond, dus kijken naar "string formatting" en hoe je daar kunt specificeren hoevaal decimalen er getoond worden.
Let wel dat de methode waarop bij string formatting een eventuele afronding wordt gedaan, niet geheel overeenkomt met wat je op school geleerd hebt.
Duidelijk ! Heb gevonden wat ik zocht:

code:
1
print ("Speed in km per hour = %s" %"{:.2f}".format(speed_in_km_per_hour))

Random WTF


Acties:
  • +1 Henk 'm!

  • gekkie
  • Registratie: April 2000
  • Laatst online: 14:59
Spasm schreef op woensdag 25 november 2020 @ 14:07:
[...]

Duidelijk ! Heb gevonden wat ik zocht:

code:
1
print ("Speed in km per hour = %s" %"{:.2f}".format(speed_in_km_per_hour))
Wel een beetje dubbel op ? :)
De eenvoudige versie is de %s in het geheel vervangen door je variant van %f.
Of nog mooier (smaken verschillen, dus in iedergeval mijn mening) door f-strings.

[ Voor 46% gewijzigd door gekkie op 25-11-2020 18:02 ]


Acties:
  • 0 Henk 'm!

  • Spasm
  • Registratie: Juni 2001
  • Laatst online: 18:11
gekkie schreef op woensdag 25 november 2020 @ 17:08:
[...]

Wel een beetje dubbel op ? :)
De eenvoudige versie is de %s in het geheel vervangen door je variant van %f.
Of nog mooier (smaken verschillen, dus in iedergeval mijn mening) door f-strings.
Geen idee. Zoals gezegd ben ik een absolute beginner hè :)
Denk dat ik die opties gaandeweg wel tegen ga komen.

Random WTF


Acties:
  • +1 Henk 'm!

  • gekkie
  • Registratie: April 2000
  • Laatst online: 14:59
Spasm schreef op woensdag 25 november 2020 @ 17:53:
[...]
Geen idee. Zoals gezegd ben ik een absolute beginner hè :)
Daarom juist, het werkt wel, maar het is dubbel en leest dus niet lekker kan verwarring scheppen, vandaar de opmerking dat het nog beter kan.
En aangezien je het printen en formatten van strings nogal veel zult gebruiken kan het lonen er wat tijd aan te besteden hoe dat werkt.
Denk dat ik die opties gaandeweg wel tegen ga komen.
f-strings ("nieuwe" manier van string formatting binnen python) is wel een handige om nu te leren (aangezien je doorgaans best wel wat strings format en dat een (in mijn optiek) vrij elegante manier is van strings formatten.

Python:
1
print("Speed in km per hour = %s" %"{:.2f}".format(speed_in_km_per_hour))

of
Python:
1
print(f"Speed in km per hour = {speed_in_km_per_hour:.2f}")


Dat laatste vind ik een stuk duidelijk (zeker als je meerdere variabelen gaat printen in dezelfde string).

[ Voor 16% gewijzigd door gekkie op 25-11-2020 18:03 ]


Acties:
  • 0 Henk 'm!

  • Spasm
  • Registratie: Juni 2001
  • Laatst online: 18:11
gekkie schreef op woensdag 25 november 2020 @ 17:57:
[...]

Daarom juist, het werkt wel, maar het is dubbel en leest dus niet lekker kan verwarring scheppen, vandaar de opmerking dat het nog beter kan.
En aangezien je het printen en formatten van strings nogal veel zult gebruiken kan het lonen er wat tijd aan te besteden hoe dat werkt.


[...]

f-strings ("nieuwe" manier van string formatting binnen python) is wel een handige om nu te leren (aangezien je doorgaans best wel wat strings format en dat een (in mijn optiek) vrij elegante manier is van strings formatten.

Python:
1
print("Speed in km per hour = %s" %"{:.2f}".format(speed_in_km_per_hour))

of
Python:
1
print(f"Speed in km per hour = {speed_in_km_per_hour:.2f}")


Dat laatste vind ik een stuk duidelijk (zeker als je meerdere variabelen gaat printen in dezelfde string).
Dat ziet er zeker beter uit!

Tot nog weet ik alleen iets van g-strings >:) >:)

Random WTF


Acties:
  • +1 Henk 'm!

  • DataGhost
  • Registratie: Augustus 2003
  • Laatst online: 17:31

DataGhost

iPL dev

Yucon schreef op vrijdag 20 november 2020 @ 16:57:
[...]

Oh, ik ga echt niet happen hoor :P Ik kan namelijk geen moment zitten met veranderingen. Sterker nog, ik juich veranderingen en verbeteringen toe maar dan wel als ze echt duidelijk voordeel hebben.

Die for/else vind ik helemaal niet makkelijker dan zo'n vlaggetje. Eerder ingewikkelder. Dus dan vind ik het niet zo sterk om het toe te voegen tenzij ik een reden over het hoofd zie.
C++:
1
2
3
4
5
6
7
8
9
int i = 0;
while(i<10) {
    doiets(i);
    i++;
}
///////
for(int i=0; i<10; i++) {
    doiets(i);
}

De for in C/C++ vind ik helemaal niet makkelijker dan while. Eerder ingewikkelder. Dat is zo ongeveer wat je zegt. Zelfde idee, je maakt iets leesbaarder en verkleint hopelijk de kans op fouten.
Python:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
found = False
for item in whatever:
    if item == "degoeie":
        doiets(item)
        found = True
        break
if not found:
    print("Niet gevonden")
#######
for item in whatever:
    if item == "degoeie":
        doiets(item)
        break
else:
    print("Niet gevonden")

Ik vind dit laatste qua leesbaarheid een stuk beter. Je vindt dat misschien in eerste instantie niet omdat je het niet eerder gezien hebt en niet kent uit andere talen, en dat wordt op de een of andere manier op Python geprojecteerd als "verkeerd". Gelukkig zijn verschillende talen verschillend.
Late edit: in zowel het while-voorbeeld als de for met found introduceer je een variabele (i / found) buiten de scope van de loop, waardoor niet per se 100% duidelijk is dat deze onlosmakelijk van elkaar verbonden horen te zijn. Ook kunnen die elders in de code ook al in gebruik kan zijn met eventueel een andere betekenis, waarvan je potentieel de waarde overschrijft, en blijven deze variabelen na de loop ook nog bestaan. In de C++-for declareer je i binnen de scope van de loop (tenminste, dat hoor je te doen) waardoor een eventueel reeds bestaande variabele gewoon genegeerd wordt, en die in de loop-scope verdwijnt ook weer als de loop klaar is. Als je meerdere soortgelijke whiles in dezelfde scope hebt blijft de i-variabele na de eerste declaratie gewoon bestaan en kan je met verkeerd copy/pasten de initializer vergeten mee te kopiëren, die staat namelijk op een andere regel, terwijl de code wel compileert maar niet doet wat je wilt. In het geval van Python zijn er überhaupt geen declaraties dus qua code is er geen verschil tussen een nieuwe en een hergebruikte variabele. Met een for/else is heel de found-variabele niet nodig en heb je dus ook niet de kans dat je een bestaande variabele met dezelfde naam per ongeluk overschrijft.[/edit]
En else if heeft op zich wel denkbare toepassingen. Meestal zie ik het echter gebruikt worden als een tweede if waarbij een tweede voorwaarde gecheckt wordt. Eentje die in de praktijk niet zal optreden als al aan de eerste voldaan is, maar tegelijkertijd ook weer zonder dat het belangrijk is dat die eerste niet optreedt omdat dat eigenlijk toch niet mogelijk is.

iets als

if kleur = rood dan 123
elseif kleur = blauw dan 456

pragmatisch gezien is

if kleur = rood dan 123
if kleur = blauw dan 456

precies evengoed.. alleen theoretisch iets minder performance door die tweede check.
Dit heeft echt helemaal niks met performance te maken, en je voorbeeld is fout. Pragmatisch gezien is het hetzelfde als
code:
1
2
if kleur = rood dan 123
if kleur != rood and kleur = blauw dan 456

Dat is dus een hoop meer typwerk waarin fouten kunnen voorkomen, zeker als je de check op rood eens wilt vervangen door groen en dat bij de tweede check vergeet. Als je dan ook nog checks op groen, paars, geel, oranje, wit en zwart wilt zit je al gauw tegen een ontzettend lelijke bult code aan te kijken, waar elseif-jes het leesbaar houden. En dan heb ik het nog niet eens gehad over het veranderen van de kleur-variabele in een van de bodies. Een ander voorbeeld is deze:
code:
1
2
if aantal < 123 dan kleur = rood
elseif aantal < 456 dan kleur = blauw

Als je dat pragmatisch hetzelfde beschouwt met "if" in plaats van "elseif" op de tweede regel, gaat er iets flink fout als aantal = 2.

[ Voor 18% gewijzigd door DataGhost op 26-11-2020 16:35 ]

Pagina: 1