fråga om print lista - python

Permalänk

fråga om print lista - python

Sitter och pluggar lite Python m.m. inför hösten, har nu försökt nästan dussinet gånger med provet och faller hela tiden på samma fråga.
Kan någon kanske visa vad jag missar?
Och frågan slumpas om varje gång så var inte orolig att du ger mig svaret eller liknande, kommer ändå inte få exakt samma fråga igen.

"Vilket/vilka av följande kodsnuttar skriver ut alla 13 ord som finns
i listan ”svar”?

Ange de eller det alternativ som är korrekt."

Min kod för själva listan

svar = 13 * [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]

kodsnutt1

m = 0 sum = "" while m < 13: sum += svar[m] m += 1 print(sum)

TypeError: Can't convert 'int' object to str implicitly

kodsnutt2

m = 1 while m < 13: print(svar[m], end=" ") m += 1

skriver bara 2-13, så fel

kodsnutt3

m = 0 while m < 13: print(svar[m], end=" ") m += 1

evighetsloop på 1

kodsnutt 4 (den jag valde)

m = 0 while m < 13: print(svar[m], end=" ") m += 1

skriver ut alla "orden", i detta fallet siffrorna.

kodsnutt5

m = 0 sum = "" while m <= 13: sum += svar[m] m += 1 print(sum)

TypeError: Can't convert 'int' object to str implicitly

Ändå får jag 0 av 1 poäng och kan inte gå vidare

Visa signatur

Microsoft är inte dumma.
De mer eller mindre tvingar på en ett dåligt operativsystem för att de sen ska kunna suga ut ännu mer pengar ifrån ens fickor genom att en "tekniker" ska kolla på problemet som de själva har skapat...

Permalänk
Medlem

Din kod för listan är galen, varför kör du 13 * [...] ?
Kör detta så du får se vilken lista du skapar:

svar = 13 * [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13] print(svar)

Dessutom ska kodsnuttarna skriva ut ord, inte integers som din lista är fylld med vilket är anledning till varför du får "TypeError: Can't convert 'int' object to str implicitly".

Permalänk
Medlem

Du kanske redan har löst det, vad vet jag, men annars är väl problemet detta:

Till att börja med finns det ingen anledning till att skriva

svar = 13 * [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]

eftersom att detta skapar en lista som ser ut så här:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1, 2, 3, 4 osv...]

vilket antagligen inte är vad du vill ha, även om du endast kollar de första 13 elementen. Men varför inte helt enkelt skapa en lista som ser ut så här:

["ord1", "ord2", "ord3", "ord4" osv.]

För som @xilli säger blir det konstigt för Python när heltalen (integers) ska adderas till en sträng (sum är en sträng). En annan lösning är dock att lägga till str() så att heltalen räknas som strängar:

# Modifierad kodsnutt 5 m = 0 sum = "" while m < 13: sum += str(svar[m]) m += 1 print(sum)

Sedan förstår jag faktiskt inte riktigt varför Kodsnutt 4 (den du valde) inte godkänns, det kan vara för att den lägger till mellanrum mellan varje ord. Men den skriver ju ut allt, så jag vet inte.

För övrigt är ett enklare sätt att skriva detta enligt mig:

svar = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13] sum = "" for ord in svar: sum += str(ord) print(ord)

Visa signatur

:)

Permalänk
Skrivet av xilli:

Din kod för listan är galen, varför kör du 13 * [...] ?
Kör detta så du får se vilken lista du skapar:

svar = 13 * [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13] print(svar)

Oj så tokigt det blir ibland. Råkade använda

svar = 13 * [None]

från början och tänkte inte på 13 * när jag ändrade till ord istället. Tack för du hittade den lilla tokigheten.

Dessutom ska kodsnuttarna skriva ut ord, inte integers som din lista är fylld med vilket är anledning till varför du får "TypeError: Can't convert 'int' object to str implicitly".

Skrivet av FilosofN:

Du kanske redan har löst det, vad vet jag, men annars är väl problemet detta:

Till att börja med finns det ingen anledning till att skriva

svar = 13 * [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]

eftersom att detta skapar en lista som ser ut så här:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1, 2, 3, 4 osv...]

vilket antagligen inte är vad du vill ha, även om du endast kollar de första 13 elementen. Men varför inte helt enkelt skapa en lista som ser ut så här:

["ord1", "ord2", "ord3", "ord4" osv.]

För som @xilli säger blir det konstigt för Python när heltalen (integers) ska adderas till en sträng (sum är en sträng). En annan lösning är dock att lägga till str() så att heltalen räknas som strängar:

# Modifierad kodsnutt 5 m = 0 sum = "" while m < 13: sum += str(svar[m]) m += 1 print(sum)

Sedan förstår jag faktiskt inte riktigt varför Kodsnutt 4 (den du valde) inte godkänns, det kan vara för att den lägger till mellanrum mellan varje ord. Men den skriver ju ut allt, så jag vet inte.

För övrigt är ett enklare sätt att skriva detta enligt mig:

svar = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13] sum = "" for ord in svar: sum += str(ord) print(ord)

Jag måste få helt rätt på frågan för att få veta ifall mitt svar var rätt, svarar jag bara med kodsnutt 4 men även kodsnutt 5 är rätt så får jag 0 poäng och får inte veta att kodsnutt 4 fungerar.
Men tackar er båda för att ni uppmärksammade mina misstag, kom på rätt spår efter att läst era svar
Ändrade till

svar = 1 * ["ord1", "ord2"....]

och lyckades då hitta lösningen på frågan efter totalt 18 försök

Visa signatur

Microsoft är inte dumma.
De mer eller mindre tvingar på en ett dåligt operativsystem för att de sen ska kunna suga ut ännu mer pengar ifrån ens fickor genom att en "tekniker" ska kolla på problemet som de själva har skapat...