Vad skriver denna kod ut?
Hej!
Jag förstår ej vad i%2 innebär här? Sen i början är builder=" " , vad innebär det och varför skriver man det ?
När man skriver builder ="" så assignar man den tomma strängen "" till variabeln builder.
if i % 2 betyder i ord "om i är jämnt delbart med 2".
naytte skrev:När man skriver builder ="" så assignar man den tomma strängen "" till variabeln builder.
if i % 2 betyder i ord "om i är jämnt delbart med 2".
Aa ok så rad 4 skrivs endast ut om i är jämnt delbart 2 tex om i=2 , annars om rad 4 ej uppfylls går den till 5-6 ?
Ja. Men ingenting "skrivs ut", utan det som händer är att man lägger till ett A i strängen.
naytte skrev:if i % 2 betyder i ord "om i är jämnt delbart med 2".
Faktiskt inte. Om i är jämnt delbart med 2 så blir ju resten 0, och 0 är "falsy" i Python. Således betyder det om i inte är jämnt delbart med 2.
Finns det fler alternativ? Inget av A-E stämmer ju. Inte ens om man tänker fel om truthy/falsy.
Skum uppgift. Dels för att rätt svar inte finns, men också: Vad har texten om att print anropas med end=”” att göra med uppgiften?
Hondel skrev:Skum uppgift. Dels för att rätt svar inte finns, men också: Vad har texten om att print anropas med end=”” att göra med uppgiften?
Rätt svar på frågan finns.
thedifference skrev:naytte skrev:if i % 2 betyder i ord "om i är jämnt delbart med 2".
Faktiskt inte. Om i är jämnt delbart med 2 så blir ju resten 0, och 0 är "falsy" i Python. Således betyder det om i inte är jämnt delbart med 2.
Finns det fler alternativ? Inget av A-E stämmer ju. Inte ens om man tänker fel om truthy/falsy.
Så rad 3 kan tolkas som om i inte är jämnt delbart med 2 och ej att i är jämnt delbart med 2? En annan källa sa exakt som naytee sa elr denne person sa att % betyder modulo (typ jämnt delbart) . Här är alternativen. Rätt svar är F utan förklaring.
thedifference skrev:naytte skrev:if i % 2 betyder i ord "om i är jämnt delbart med 2".
Faktiskt inte. Om i är jämnt delbart med 2 så blir ju resten 0, och 0 är "falsy" i Python. Således betyder det om i inte är jämnt delbart med 2.
Finns det fler alternativ? Inget av A-E stämmer ju. Inte ens om man tänker fel om truthy/falsy.
Hoppsan, jag var lite väl snabb där. Snyggt fångat!
thedifference skrev:naytte skrev:if i % 2 betyder i ord "om i är jämnt delbart med 2".
Faktiskt inte. Om i är jämnt delbart med 2 så blir ju resten 0, och 0 är "falsy" i Python. Således betyder det om i inte är jämnt delbart med 2.
Finns det fler alternativ? Inget av A-E stämmer ju. Inte ens om man tänker fel om truthy/falsy.
men om i =0 så borde den skriva ut först B eftersom i=0 är inte jämnt delbart med 2? så det borde vara sen om i=1 blir det B igen och sen i=2 så hoppar den till A så det blir BBAB eller? men det motsäger facits svar som är på F) alternativet.
Nu ska vi skilja på två saker här.
if i % 2:
# om i är jämnt delbart med två blir värdet av i % 2 lika med 0.
# detta betyder alltså i sådana fall "if 0".
# 0 i Python är "falsy"; falsk-aktigt, alltså blir det "if False", vilket inte körs
if i % 2 == 0:
# detta står inte i koden, men det är lätt att tro det
# om i är jämnt delbart med två blir värdet av detta
# if 0 == 0
# vilket blir "if True", vilket KÖRS
Så vad händer?
i = 0 -> i % 2 = 0, 0=falsy, körs inte, blir else, vi får ett A
i = 1 -> i % 2 = 1, 1=truthy, körs, vi får ett B
i = 2 -> i % 2 = 0, 0=falsy, körs inte, blir else, vi får ett A
i = 3 -> i % 2 = 1, 1=truthy, körs, vi får ett B
thedifference skrev:Nu ska vi skilja på två saker här.
if i % 2: # om i är jämnt delbart med två blir värdet av i % 2 lika med 0. # detta betyder alltså i sådana fall "if 0". # 0 i Python är "falsy"; falsk-aktigt, alltså blir det "if False", vilket inte körs if i % 2 == 0: # detta står inte i koden, men det är lätt att tro det # om i är jämnt delbart med två blir värdet av detta # if 0 == 0 # vilket blir "if True", vilket KÖRS
Så vad händer?
i = 0 -> i % 2 = 0, 0=falsy, körs inte, blir else, vi får ett A
i = 1 -> i % 2 = 1, 1=truthy, körs, vi får ett B
i = 2 -> i % 2 = 0, 0=falsy, körs inte, blir else, vi får ett A
i = 3 -> i % 2 = 1, 1=truthy, körs, vi får ett B
Fast hur kan 1 vara jämnt delbart med 2 och så körs B och samma sak om i =3? I matten är ju 1/2=0.5 och 3/2=1.5. Det går emot logiken i matten som säger att om något tal är jämnt delbart med ett annat tal så ska man få ett heltal tex 4/2=2 , här får vi decimaltal om vi tar 1/2 då i=1
Det är det inte. Vi kollar inte om i är delbart med 2. Vi kollar om det inte är det.
i % 2 där i inte är jämnt delbart med 2 -> vi får en rest 1 (modulo tar fram resten) -> 1 är "truthy" -> blocket körs och vi lägger till ett A.
if i % 2: # körs om i INTE är delbart med 2, men man måste tänka efter med truthy och falsy för att förstå varför
if i % 2 == 0: # körs om i är delbart med 2 och är mer lättbegripligt
Prova att köra följande snutt:
for i in range(4):
if i:
print(i)
Den kommer printa 1, 2 och 3 men inte 0, för att 0 är falsy och alla andra tal är truthy.
Prova även
for i in range(4):
print(f"{i} % 2 is {bool(i % 2)}")
thedifference skrev:Det är det inte. Vi kollar inte om i är delbart med 2. Vi kollar om det inte är det.
i % 2 där i inte är jämnt delbart med 2 -> vi får en rest 1 (modulo tar fram resten) -> 1 är "truthy" -> blocket körs och vi lägger till ett A.
if i % 2: # körs om i INTE är delbart med 2, men man måste tänka efter med truthy och falsy för att förstå varför if i % 2 == 0: # körs om i är delbart med 2 och är mer lättbegripligt
Prova att köra följande snutt:
for i in range(4): if i: print(i)
Den kommer printa 1, 2 och 3 men inte 0, för att 0 är falsy och alla andra tal är truthy.
Prova även
for i in range(4): print(f"{i} % 2 is {bool(i % 2)}")
Jaha okej vad konstigt! Så som frågan är formulerad tror man att i%2 innebär om i är jämnt delbart med 2 vilket ingen av talen är 0-3 är förutom i=2 , men att man ska tolka det som att i% 2 betyder att i inte är jämnt delbart med , ja då får man att det körs som du säger. Är lite less på frågan men har förstått någorlunda. Tack!
Om det stått ”if i%2 == 0” hade det betytt ”om i är jämt”
Hondel skrev:Om det stått ”if i%2 == 0” hade det betytt ”om i är jämt”
Jaa men då blir det annan case och då kan jag tänka mig det är enklare också. Det här var bara en kuggfråga som vanligt.
Ja lite kuggfråga var det ju, eftersom man gärna vill läsa ”if i%2” som om det står ”if i is even” men det skulle ju motsvaras av ”if i%2==0”, så det är denna ”==0” man själv lägger till undermedvetet :)
Hondel skrev:Ja lite kuggfråga var det ju, eftersom man gärna vill läsa ”if i%2” som om det står ”if i is even” men det skulle ju motsvaras av ”if i%2==0”, så det är denna ”==0” man själv lägger till undermedvetet :)
Vad betyder if i%2==0? Att om i är jämnt delbart med 2 så är resten 0 och 0==0 är sant? Så om jag ser något liknande på ett nytt prov så ska jag automatiskt inte tänka på if i%2==0 utan att if i%2 inte är jämnt delbart med 2?
i % 2 ger resten när i delas med 2.
if i % 2 == 0 betyder således "om i är jämnt".
if i % 2 != 0 betyder "om i är udda".
if i % 2 betyder också det "om i är udda", men man måste tänka efter med Pythons truthy/falsy för att inse det. Om man skriver sån kod avsiktligt så är det för att man är väldigt bekväm med Python och förutsätter att andra som läser koden också är det, för att man vill ge elever en curveball, eller för att man kodgolfar - försöker göra koden så kort som möjligt - och då hade man skrivit if i%2.
thedifference skrev:i % 2 ger resten när i delas med 2.
if i % 2 == 0 betyder således "om i är jämnt".
if i % 2 != 0 betyder "om i är udda".
if i % 2 betyder också det "om i är udda", men man måste tänka efter med Pythons truthy/falsy för att inse det. Om man skriver sån kod avsiktligt så är det för att man är väldigt bekväm med Python och förutsätter att andra som läser koden också är det, för att man vill ge elever en curveball, eller för att man kodgolfar - försöker göra koden så kort som möjligt - och då hade man skrivit if i%2.
Jag ska bara tänka på true o false när jag ser frågan och inte komplicera. Du nämner något med udda (jag är ej helt säker på vad du försöker säga där.) Tack för hjälpen iaf!