19 svar
172 visningar
destiny99 behöver inte mer hjälp
destiny99 8066
Postad: 9 dec 20:05 Redigerad: 9 dec 20:05

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".

destiny99 8066
Postad: 9 dec 21:37 Redigerad: 9 dec 21:38
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 ?

naytte Online 5149 – Moderator
Postad: 9 dec 21:58 Redigerad: 9 dec 21:58

Ja. Men ingenting "skrivs ut", utan det som händer är att man lägger till ett A i strängen.

thedifference 409
Postad: 10 dec 07:01 Redigerad: 10 dec 07:04
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.

Hondel 1388
Postad: 10 dec 07:47

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?

destiny99 8066
Postad: 10 dec 08:50
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. 

destiny99 8066
Postad: 10 dec 08:52 Redigerad: 10 dec 08:57
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!

destiny99 8066
Postad: 10 dec 15:43 Redigerad: 10 dec 15:45
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.

thedifference 409
Postad: 10 dec 17:13

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

destiny99 8066
Postad: 10 dec 18:42 Redigerad: 10 dec 18:56
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 

thedifference 409
Postad: 10 dec 19:11 Redigerad: 10 dec 19:17

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)}")
destiny99 8066
Postad: 10 dec 19:36 Redigerad: 10 dec 19:40
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!

Hondel 1388
Postad: 10 dec 19:59

Om det stått ”if i%2 == 0” hade det betytt ”om i är jämt”

destiny99 8066
Postad: 10 dec 20:00 Redigerad: 10 dec 20:01
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. 

Hondel 1388
Postad: 11 dec 14:26

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 :)

destiny99 8066
Postad: 11 dec 14:37 Redigerad: 11 dec 14:40
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?

thedifference 409
Postad: 11 dec 17:58

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.

destiny99 8066
Postad: 11 dec 18:35 Redigerad: 11 dec 18:41
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!

Svara
Close