14 svar
252 visningar
frank011010 är nöjd med hjälpen
frank011010 19 – Fd. Medlem
Postad: 28 apr 2020 16:58 Redigerad: 29 apr 2020 09:58

Python mattematik

Har fastnat på denna fråga och behöver hjälp med att lösa den, försökt att göra den flera gånger och tillslut kika jag på facit och skrev av texten men ändå så blev det fel. Uppgiften:

PerEri 190
Postad: 28 apr 2020 17:08

Kan du beskriva lite mer vad som blev fel?

Ett vanligt misstag i Python är att indenteringen (hur långt in på raden man skriver kod) blir fel. Det kan göra så att programmet inte beter sig som du tänkt dig. Kolla noga en extra gång!

frank011010 19 – Fd. Medlem
Postad: 28 apr 2020 17:12

Programmet ska skriva alla talen som finns i länken, fast den skriver massor med tal som inte har med frågan att göra. Jag misstänker också att indenteringen har blivit fel har testat ta bort rader och lägga till men lyckas inte att få det rätt. 

PerEri 190
Postad: 28 apr 2020 17:27

Jag har provat köra koden själv och det är definitivt indenteringen som är tokig. Programmet gör vad ska utan att du behöver ta bort rader, men det är viktigt att texten på varje rad hamnar lagom långt in på raden.

Har du förstått vad programmet ska göra, dvs vad perfekta tal är för något?

frank011010 19 – Fd. Medlem
Postad: 28 apr 2020 17:29

Ja deklart.

PerEri 190
Postad: 28 apr 2020 17:49

Vad bra! Då återstår att gå igenom koden.

För varje tal "x" mellan 1 och 10000 vill du se om det är ett perfekt tal (eller rikt eller fattigt). Det här är den yttersta loopen.

for x in range(1, 10000):

För ett givet "x" i den här loopen börjar du med att hitta de tal "a" som delar "x". Du kollar helt enkelt om divisionen av x med a går jämnt ut ( x % a ger resten vid division av x med a). Dessa tal ska sparas i en lista "delare". Det här är en loop inne i den yttre loopen ovan:

    delare = []
    for a in range(1, x):
        if x % a == 0:
            delare.append(a)

När listan med delare är skapad, dvs när loopen "for a in range ..." är färdig, summerar du alla delare och tilldelar summan till variabeln "b".

    b = sum(delare)

Nu återstår att kolla om talet "x" är ett perfekt tal, ett rikt tal eller ett fattigt tal.

    if b == x:
        perfekta_tal.append(x)
    elif b > x:
        rika_tal.append(x)
    else:
        fattiga_tal.append(x)

De sista printsatserna ligger utanför den yttersta loopen och körs när allt ovanför är klart. Jag har försökt vara noga med indenteringen ovan så kika noga och justera din kod så att den ser ut som min så ska det funka. Prova!

frank011010 19 – Fd. Medlem
Postad: 28 apr 2020 18:41

Jag förstår koden nu men indenteringen är fel vet inte exakt vart felet är. 

PerEri 190
Postad: 28 apr 2020 19:39

Vet inte riktigt hur jag kan hjälpa dig här. Har du något förslag?

frank011010 19 – Fd. Medlem
Postad: 28 apr 2020 19:42

Går du in i länken så ser du en skärmbild på facit, när jag skriver av facit i repl.it så blir det något fel med indenteringen. Jag behöver hjälp att hitta vad felet är. 

PerEri 190
Postad: 28 apr 2020 19:49

Titta riktigt noga i mitt svar med koden ovan och jämför med hur du gjort indenteringen på repl.it. Jag var noga när jag skrev mitt svar, så du kan se hur mycket varje rad är indenterad jämfört med de andra raderna.

frank011010 19 – Fd. Medlem
Postad: 28 apr 2020 21:03

Jag gjorde det, blev fortfarande fel. Är de möjligt att du kan kopira min kod och ändra indenteringen och dela med dig?

PerEri 190
Postad: 28 apr 2020 21:17
Visa spoiler
frank011010 19 – Fd. Medlem
Postad: 28 apr 2020 21:34

Tack för hjälpen, märkte nyss hur små misstag kan förstöra hela programmet!

PerEri 190
Postad: 28 apr 2020 21:39

Programmering är delvis konsten att vara väldigt, väldigt noggrann. Lycka till med Python framöver. Det är ett otroligt användbart progremmeringsspråk som du kommer att ha massor av nytta av om du tänker dig en ingenjörskarriär.

frank011010 19 – Fd. Medlem
Postad: 28 apr 2020 21:41

Japp det har jag tänkt mig. Du får ha en trevlig natt! 

Svara Avbryt
Close