listor i program
Hej!
Jag försöker att undersöka tal i intervallet 0-9 i ett problem med två villkor: Om talet är jämt så ska det divideras med två, och om det är udda så ska det multipliceras med 3 +1 och divideras med 2. Detta ska upprepas för varje tal tills det når 1. Detta leder i sin tur till att varje tal har ett bestämt antal iterationer till 1. Jag lyckades programmera så att jag fick en lista som innehåller värden från värdet på lägst antal iterationer till det högsta värdet, därav lista_ittalbell.
Mitt mål är att få en lista med antalet tal i intervallet som har motsvarande antal iterationer som i listan, vet dock inte riktigt hur jag ska få till det. Det som blir problem är när jag försöker få programmet att ta ett värde i taget från lista_ittabell och hur jag ska summera antalet tal som har samma antal iterationer.
Mitt försök:
lista_ittabell=[0,1,2,3,4,5,6,7,8,9,10,11,12,13]
sim=[]
värden_tabell=[]
for tl in range(10):
itera=0
fx=tl
while tl>1:
if tl % 2 == 1:
tl = (((3 * tl) + 1) / 2)
itera += 1
elif tl % 2 == 0:
tl = (tl / 2)
itera += 1
#Här tänkte jag att programmet sätter m=(ett värde från listan) och testar alla 9 tal innan den sätter m=nästa värde på listan och testar talen igen:
for m in range(min(lista_ittabell), max(lista_ittabell)+1):
if itera==m and tl==1:
sim.append(fx)
#Här tänkte jag att programmet summerar antalet objekt i sim och lägger till det värdet i värden_tabell, och sedan nollställer sim innan den tar nästa värde på m.
if fx==9:
n_1=len(sim)
värden_tabell.append(n_1)
sim[:]=[]
print(värden_tabell)
Hur ska jag få programmet att bara ta ett värde i taget från listan lista_ittabell? Hur ska jag skriva?
Enormt tacksam för hjälp!
Mvh nybörjare
Hur kan det finnas 14 olika värden i lista_ittabell om du bara undersöker talen 0-9?
Blir det inte bra om du tar bort lista_ittabell och bara sparar resultatet av att undersöka fx i en lista, ungefär iterationer.append(itera), och efteråt går igenom den listan för att få antalet tal som gav ett visst antal iterationer?
Laguna skrev:Hur kan det finnas 14 olika värden i lista_ittabell om du bara undersöker talen 0-9?
Blir det inte bra om du tar bort lista_ittabell och bara sparar resultatet av att undersöka fx i en lista, ungefär iterationer.append(itera), och efteråt går igenom den listan för att få antalet tal som gav ett visst antal iterationer?
Tack för svar!
Innan jag såg ditt svar så gjorde jag ett nytt försök och ändrade koden:
Jag tycker att koden borde fungera, men som man ser i bilden, så gör den inte det. Förstår inte varför? Kan någon snälla förklara?
Det första problemet är att du appendar till värden_tabell varje varv genom loopen som börjar med tl och slutar med 1. Det som står på rad 30-32 ska flyttas ut till vänster ett snäpp.
Laguna skrev:Det första problemet är att du appendar till värden_tabell varje varv genom loopen som börjar med tl och slutar med 1. Det som står på rad 30-32 ska flyttas ut till vänster ett snäpp.
Jaha okej, tack!
Nu blev det lite bättre, förstår dock inte varför det bara är de första värdena i listan, värden_tabell , som stämmer?
Listan borde se ut såhär:[ 0,1,1,1,1,1,1,0,0,0,0,1,0,1]
Hur rättar jag till det?
Står det m += repeat?
Laguna skrev:Står det m += repeat?
Ja
KriAno skrev:Laguna skrev:Står det m += repeat?
Ja
Ska det det? Stoppa in print(m) på raden efter så du ser vilka värden m får.
Laguna skrev:KriAno skrev:Laguna skrev:Står det m += repeat?
Ja
Ska det det? Stoppa in print(m) på raden efter så du ser vilka värden m får.
Tack så hemskt mycket för att du orkade sätta dig in i mitt problem och guida mig rätt!! :)
Bra att det fungerar.
Man kan göra det lite enklare, och man kan framför allt göra det effektivare. Nu undersöker du varje tal 0-9 14 gånger. Du behöver inte heller vara beroende av att du har fått fram listan lista_ittabell i förväg. Ponera att du skulle undersöka talen 0-1000 i stället.
Laguna skrev:Bra att det fungerar.
Man kan göra det lite enklare, och man kan framför allt göra det effektivare. Nu undersöker du varje tal 0-9 14 gånger. Du behöver inte heller vara beroende av att du har fått fram listan lista_ittabell i förväg. Ponera att du skulle undersöka talen 0-1000 i stället.
Men om jag inte får fram lista_ittabell i förväg så vet jag ju inte hur många gånger loopen med "repeat" ska upprepas? Jag undersökte iallafall talen 0-1000:
Nej, men hela ditt program kan förenklas enligt vad jag skrev tidigare.
Jag provkörde med 1000 och 113, som du skrev, och det tar 15 sekunder på min dator. Det kan gå mycket fortare med en bättre metod.
Laguna skrev:Nej, men hela ditt program kan förenklas enligt vad jag skrev tidigare.
Jag är helt nybörjare, så jag förstår tyvärr inte vad du menar ?
Men jag tycker att det låter väldigt intressant!
KriAno skrev:Laguna skrev:Nej, men hela ditt program kan förenklas enligt vad jag skrev tidigare.
Jag är helt nybörjare, så jag förstår tyvärr inte vad du menar ?
Men jag tycker att det låter väldigt intressant!
Hur gör du nu för att komma fram till att maximala antalet iterationer är 13 respektive 113?
Laguna skrev:KriAno skrev:Laguna skrev:Nej, men hela ditt program kan förenklas enligt vad jag skrev tidigare.
Jag är helt nybörjare, så jag förstår tyvärr inte vad du menar ?
Men jag tycker att det låter väldigt intressant!
Hur gör du nu för att komma fram till att maximala antalet iterationer är 13 respektive 113?
Jag gör såhär:
Det ser utmärkt ut, och notera att du har samlat all information du behöver i listan list_iterationer. Du behöver inte undersöka några tal igen om du använder den.
Gå igenom list_iterationer på ett bra sätt och skapa din lista av antal tal för varje antal iterationer.
Hur lång tid tog det för dig att köra det andra programmet när det var 1000 tal?