16 svar
436 visningar
KriAno 434
Postad: 1 nov 2019 11:36 Redigerad: 1 nov 2019 12:16

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

Laguna Online 28462
Postad: 1 nov 2019 16:34

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?

KriAno 434
Postad: 1 nov 2019 17:35
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?

Laguna Online 28462
Postad: 1 nov 2019 18:26

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.

KriAno 434
Postad: 1 nov 2019 19:37 Redigerad: 1 nov 2019 19:54
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?

Laguna Online 28462
Postad: 2 nov 2019 06:53

Står det m += repeat?

KriAno 434
Postad: 2 nov 2019 09:26
Laguna skrev:

Står det m += repeat?

Ja

Laguna Online 28462
Postad: 2 nov 2019 09:28
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.

KriAno 434
Postad: 2 nov 2019 09:56
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!! :)

Laguna Online 28462
Postad: 2 nov 2019 10:06

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.

KriAno 434
Postad: 2 nov 2019 12:05
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:

Laguna Online 28462
Postad: 2 nov 2019 16:28

Nej, men hela ditt program kan förenklas enligt vad jag skrev tidigare. 

Laguna Online 28462
Postad: 2 nov 2019 17:37

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.

KriAno 434
Postad: 2 nov 2019 20:01 Redigerad: 2 nov 2019 20:20
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! 

Laguna Online 28462
Postad: 3 nov 2019 06:56
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?

KriAno 434
Postad: 3 nov 2019 10:46
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:

Laguna Online 28462
Postad: 3 nov 2019 17:52

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?

Svara Avbryt
Close