Permalänk
Medlem

Python (listor)

Hej! Jag håller på med den här uppgiften, https://www.pixeltopic.com/image/ngtdsjcfzutrn/ , och alla som jag printar ut ger outputen "ge ord" men ja, det är ju såklart fel.....

Så jag tänkte om man ska printade allt så skapade jag en lista:
m=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40......68]

men asså det kan ju inte vara rimligt???? tänk om uppg va 128 kodsnuttar?!

Men då läste jag någonstans att man för enkelhetens skull, kan skapa en lista med endast 3 element. Men måste ändra villkoret i while-loopen så att det stämmer för just 3 element. Är det isfåfall här de menar med att ändra i while loppen? (det fetmarkerade)

m = 1
while m < 50:
namn[m] = input("Ge ord: ")
m += 1

så jag skulle få något i

m = [1,2,3]
while m < 3:
namn[m] = input("Ge ord: ")
m += 1

men får då felsvaret:

line 2, in <module>
while m < 3:
TypeError: unorderable types: list() < int()
>>>

Hur ska man göra?

Permalänk
Medlem
Skrivet av heyymel:

Hej! Jag håller på med den här uppgiften, https://www.pixeltopic.com/image/ngtdsjcfzutrn/ , och alla som jag printar ut ger outputen "ge ord" men ja, det är ju såklart fel.....

Så jag tänkte om man ska printade allt så skapade jag en lista:
m=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40......68]

men asså det kan ju inte vara rimligt???? tänk om uppg va 128 kodsnuttar?!

Men då läste jag någonstans att man för enkelhetens skull, kan skapa en lista med endast 3 element. Men måste ändra villkoret i while-loopen så att det stämmer för just 3 element. Är det isfåfall här de menar med att ändra i while loppen? (det fetmarkerade)

m = 1
while m < 50:
namn[m] = input("Ge ord: ")
m += 1

så jag skulle få något i

m = [1,2,3]
while m < 3:
namn[m] = input("Ge ord: ")
m += 1

men får då felsvaret:

line 2, in <module>
while m < 3:
TypeError: unorderable types: list() < int()
>>>

Hur ska man göra?

Är relativt ny på python så kikade in i din tråd.

Det jag inte förstår är uppgiften. Skall du rätta koden som länken hänvisar till? Är det du som skrivit koden som du länkat till?

Vad är det för uppgifter du löser?

Skickades från m.sweclockers.com

Visa signatur

Laptop: HP Elitebook 640 G9
Server: HP Microserver N54L, 8 GB ram, 8 TB hd.

Permalänk
Medlem

Är osäker på vad du menar(samt att jag inte kan programmera något vidare...) men jag tror du är ute efter att du vill ha en dynamisk storlek på listan utan att behöva "hårdkoda" storleken. Detta kan göras med dinLista.append().
append() lägger till ett "inlägg" i slutet på din lista.
Ett exempel på kod:

#Ändra antalSvar till önskad storlek antalSvar = 5 svarsLista = [] for i in range(0,antalSvar): svar = input("Ge ord:") svarsLista.append(svar) print(svarsLista)

I koden ovan så frågar den efter input lika många gånger som variabeln antalSvar är satt till. Alla svar lagras sedan i listan svarsLista där första inputen har index 0, andra svaret index 1 o.s.v.
Nu kan du alltså sätta antalSvar till ex. 128 för att få 128 poster i den.

Om du vill fylla en lista med n nummer i nummerordning som ditt exempel med m så kan du använda samma princip:

#Ändra antalSvar till önskad storlek antalSvar = 128 svarsLista = [] for i in range(0,antalSvar): svarsLista.append(i+1) print(svarsLista)

Koden ovan ger en print som ser ut:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128]

Kanske inte vad du är ute efter men append() kan vara bra att veta ändå ang. listor

Angående varför du får fel(tror jag) är att du satt m=1.
Detta gör att m kommer att bli 3 under loopens gång. Din lista har inget index som är 3 då indexeringen i listor börjar med 0.
D.v.s en lista som har lista = [1,2,3] har index 0,1,2 där lista[0] = 1, lista[1] = 2 och lista[2] = 3.
Om du sätter m=0 i din kod så borde felet försvinna alternativt skriver namn[m-1] = input("Ge ord: ")
Sen är det även fel med det som påpekas nedan. Antar att m=[1,2,3] skall vara namn = [1,2,3]
Överlag är det ganska rörigt vad du egentligen vill, kanske värt att förtydliga

Visa signatur

Bara gammalt skräp...

Permalänk
Medlem

Oklart vad uppgiften är för mig.
Men jag tolkar den som bardbard första lösning.

Angående felet är det inte konstigt alls!

m = [1,2,3] //array while m < 3: //m är en array, arrayen i sig har inget numeriskt värde och kan inte jämföras med en int namn[m] = input("Ge ord: ") m += 1 // m är en array, arrayen i sig har inget numeriskt värde och kan inte adderas med 1

Visa signatur

Ryzen 5600X | MSI Tomahawk | GTX 3070

Permalänk
Medlem
Skrivet av bardbard:

Om du vill fylla en lista med n nummer i nummerordning som ditt exempel med m så kan du använda samma princip:

Man kan också använda range direkt för att skapa en sån lista:

antalSvar = 128 svarsLista = list(range(1, antalSvar + 1)))

Permalänk
Medlem
Skrivet av perost:

Man kan också använda range direkt för att skapa en sån lista:

antalSvar = 128 svarsLista = list(range(1, antalSvar + 1)))

Hehe som sagt är amatör men misstänkte att det fanns ett smidigare sätt, bra att veta iaf om jag får för mig att köra Python igen!
Min kod får ses dom en pedagogisk användning av append då

Visa signatur

Bara gammalt skräp...

Permalänk
Medlem

@perost: @Sonywalk: @bardbard: @zeem:

OOo trodde jag hade print scrinat så uppg också kom med, uppg är"Vilket/vilka av följande kodsnuttar läser in 50 ord till listan "namn"?

Ange de eller det alternativ som är korrekt."

Permalänk
Medlem
Skrivet av bardbard:

Är osäker på vad du menar(samt att jag inte kan programmera något vidare...) men jag tror du är ute efter att du vill ha en dynamisk storlek på listan utan att behöva "hårdkoda" storleken. Detta kan göras med dinLista.append().
append() lägger till ett "inlägg" i slutet på din lista.
Ett exempel på kod:

#Ändra antalSvar till önskad storlek antalSvar = 5 svarsLista = [] for i in range(0,antalSvar): svar = input("Ge ord:") svarsLista.append(svar) print(svarsLista)

I koden ovan så frågar den efter input lika många gånger som variabeln antalSvar är satt till. Alla svar lagras sedan i listan svarsLista där första inputen har index 0, andra svaret index 1 o.s.v.
Nu kan du alltså sätta antalSvar till ex. 128 för att få 128 poster i den.

Om du vill fylla en lista med n nummer i nummerordning som ditt exempel med m så kan du använda samma princip:

#Ändra antalSvar till önskad storlek antalSvar = 128 svarsLista = [] for i in range(0,antalSvar): svarsLista.append(i+1) print(svarsLista)

Koden ovan ger en print som ser ut:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128]

Kanske inte vad du är ute efter men append() kan vara bra att veta ändå ang. listor

Angående varför du får fel(tror jag) är att du satt m=1.
Detta gör att m kommer att bli 3 under loopens gång. Din lista har inget index som är 3 då indexeringen i listor börjar med 0.
D.v.s en lista som har lista = [1,2,3] har index 0,1,2 där lista[0] = 1, lista[1] = 2 och lista[2] = 3.
Om du sätter m=0 i din kod så borde felet försvinna alternativt skriver namn[m-1] = input("Ge ord: ")
Sen är det även fel med det som påpekas nedan. Antar att m=[1,2,3] skall vara namn = [1,2,3]
Överlag är det ganska rörigt vad du egentligen vill, kanske värt att förtydliga

Om jag inte vill avvända append, tror de tär lite överkurs?

Men testade som du sa:

m = 0
while m < 3:
namn[m] = input("Ge ord: ")
m += 1

och körde programmet ,fick då ut output "Ge ord!"

som du såg på bilden, bifogar den igen då: https://www.pixeltopic.com/image/gkbwidwewjtmwkt/
Då är den ju felaktig? eftersom de hade satt m=1 i uppgifnte, och inte m=0? eller hur?

Permalänk
Medlem
Skrivet av heyymel:

@perost: @Sonywalk: @bardbard: @zeem:

OOo trodde jag hade print scrinat så uppg också kom med, uppg är"Vilket/vilka av följande kodsnuttar läser in 50 ord till listan "namn"?

Ange de eller det alternativ som är korrekt."

Länge sedan jag pysslade med Python, men utifrån det jag kan se från bilden så är det samma sak på alla kodsnuttar förutom på tre av dem. De som initierar m=1 kommer köras 49 gånger, medan den som har villkor m<=50 och sätter m=0 kommer köras 51 gånger. Notera att detta är utifrån det jag tittat lite snabbt på koden bara, det bästa vore om du bekräftar det genom att faktiskt köra koden. Däremot koden inuti while-loopen ser ut att vara samma princip, så det verkar som att kärnan i uppgiften är att de sätter olika villkor för loopen.

Förstår inte dock, ingen av de där kodsnuttarna körs överhuvudtaget eftersom listan inte är initierad, provade i en onlinekompilator. Du är tvungen att initiera listan först, det här exempelvis skapar en lista med 50 nollor:

namn = [0] * 50

Permalänk
Medlem
Skrivet av heyymel:

Om jag inte vill avvända append, tror de tär lite överkurs?

Men testade som du sa:

m = 0
while m < 3:
namn[m] = input("Ge ord: ")
m += 1

och körde programmet ,fick då ut output "Ge ord!"

som du såg på bilden, bifogar den igen då: https://www.pixeltopic.com/image/gkbwidwewjtmwkt/
Då är den ju felaktig? eftersom de hade satt m=1 i uppgifnte, och inte m=0? eller hur?

Att du får output "Ge ord:" beror på raden

namn[m] = input("Ge ord: ")

Ger man en sträng som argument till input så kommer den strängen att skrivas ut till stdout (alltså, terminalen) när input-funktionen kallas. Skriver du in ett ord och trycker enter kommer input-funktionen att läsa in ordet och det läggs in i listan på index m, varpå loopen börjar om och du får en ny prompt att skriva in ett ord. Tills loopen terminerar, givetvis. https://docs.python.org/3.6/library/functions.html#input.

Angående uppgiften så är som @MrDoggo säger samtliga kodsnuttar felaktiga om de bara står för sig själva, eftersom listan inte existerar. Om man ska anta att listan redan är initialiserad med 50 st element (vilket känns sjukt opedagogiskt) så finns det tekniskt sett tre svar som läser in 50 strängar i listan, men ett av dem gör också en annan sak.

Kom ihåg att index börjar på 0, samt att loopen fortsätter till (men inte till och med) villkoret i loop guarden är felaktigt, så kan du lista ut vilka lösningarna är.

Edit: Jag har antagit att du använder Python 3, input i Python 2 fungerar lite annorlunda och bör inte användas såhär.

Permalänk
Medlem

@MrDoggo: Hmm.. vet inte om jag hänger med?

Permalänk
Medlem

@SimpLar: @MrDoggo:
https://www.pixeltopic.com/image/ywlaxdjcktkfh/

jag la till då ovan all kod

m = [0] * 84

på varje, må vissa (de jag bockat för) fungerade, men inte de andra, men ändå får jag fel? :S

Permalänk
Medlem
Skrivet av heyymel:

@SimpLar: @MrDoggo:
https://www.pixeltopic.com/image/ywlaxdjcktkfh/

jag la till då ovan all kod

m = [0] * 84

på varje, må vissa (de jag bockat för) fungerade, men inte de andra, men ändå får jag fel? :S

Vet inte ens vad du provat göra, du säger bara att du får fel. Prova dig fram lite grann, skriv in värden och manuellt prova rader i interpreten osv.

Permalänk
Medlem

@MrDoggo: jag lyckades lösa den nu, men bara genom att förstå koden, men fattar inte hur man skulle göra för att få ut orden iaf