Hur beräknar man summor i python
Jag ska beräkna summan av denna uppgiften här nedan. Jag har väldigt stora problem med den.
jag får inte fram genom help(math.geometrical sum) för det finns inte.
finns det något program eller kod eller modul som ni kan rekomendera för att lösa denna uppgiften. Jag har väldigt stora problem hur jag ska lösa denna svåra uppgift.
Summa=0
k=0
while summa <=129:
k=k+1
summa=summa+33/np.log(k-3)
print(k)
Svårt att se om detta stämmer!
mitt svar är 40326
Visa spoiler
Skriv ditt dolda innehåll här
k börjar på 33 och inte på 1.
Ja det skulle stå 33 istället men min uträkning är ändå fel.
Nu efter ändringen ökar du med 33 varje gång.
Ska det vara såhär?
redigerade i min kod.
Och fick svaret 1 med ett rött fel meddelande.
k ska börja på 33 och öka med 1 för varje varv.
detta måste vara rätt
Detta var fel-_-
Du får tänka efter vad din kod gör också. Det är nästan rätt, men vad blir det första k-värde som används?
Ska k på andra raden bli 32 istället, att det räknas från noll? Annars är sedan allt rätt?
jag har lite problem att förstå då jag bara har hållt på en vecka med python.
Eller ska k=34 på andra raden. Sedan ser allt rätt ut va?
jag testade k=34 men det gav oxå fel output
För det första talet du ska lägga till summan ska
Tänk också på att villkoret i while-loopen är uppfyllt även sista gången du går igenom loopen, vad betyder det för det sista k-värdet? (Dvs vad är det som händer på sista raden i loppen?)
Slutligen ska ditt villkor egentligen vara strängt dvs inte Edit: det skulle det inte alls.
summa=0
k=33
while summa<=129:
k=k+1
summa=summa+1/np.log(k-3)
print(k)
är oxå fel
Är det rätta svaret 763?
Det var vad jag fick med C++ eftersom jag inte kan Python.
Vilken typ är variabeln summa? Den måste vara ett flyttal.
Det ska vara minsta heltal n
Zorikan2017 skrev:Det ska vara minsta heltal n
Det förstår jag. Vad är det rätta svaret?
Kan du visa din senaste kod?
Det är ingen som vet verkar det som. Detta är ju en dugga.
Vad är en "dugga"?
Denna algoritm fungerar om summa är ett flyttal för att få svaret 763:
Jag vet när du gör fel i koden, men jag vet inte det rätta numeriska svaret.
Om du inte kan läsa dig fram till vilket värde k får första gången det används i log(k-3) så stoppa in en print(k) precis innan den används.
En dugga är en sorts diagnostiskt prov, som görs några gånger under terminen. Tror jag.
Dugga är ett prov som man får göra hemifrån. Alla hjälp medel är tillåtna förutom att någon inte får göra den åt en.
Ok!
Varifrån kom denna bild ursprungligen?
Python jupyter
Vart i koden är det fel?
Ska k=33 på andra raden eller ska det vara 34?
Jag förstår inte riktigt var i koden det är fel? Är det på ett ställe eller flera?
Visa spoiler
Skriv ditt dolda innehåll här
Peter_ skrev:Är det rätta svaret 763?
Det var vad jag fick med C++ eftersom jag inte kan Python.
Vilken typ är variabeln summa? Den måste vara ett flyttal.
Variabler deklareras inte i Python. summa = 0 får summa att bli heltalet 0. summa = summa + 1/log(5) får summa att bli nåt flyttal.
Ska det då vara
summa=33
k=33
while summa<=129:
k=k+1
summa=summa+1/np.log(k-3)
print(k)
så det är bara fel på första raden.
summa=129 menar jag
Zorikan2017 skrev:Ska det då vara
summa=33
k=33
while summa<=129:
k=k+1
summa=summa+1/np.log(k-3)
print(k)
så det är bara fel på första raden.
Nästan. Titta på originalfrågan. Summan är inget innan vi startar. Sätt summa = 0 och prova igen.
Men då blir koden precis som förr
Zorikan2017 skrev:Men då blir koden precis som förr
Ok, kan du visa mig den koden?
Det är ju den på bilden den som du frågade över
Ok, när du kör den, vad är resultatet av k?
Då blir outputen 763. Det var det första numret n jag testade men fick fel
Det är samma svar som jag fick. Vad är korrekt svar?
Nej tyvärr:(
Hur vet du då att 763 är fel svar?
Man testar i duggan om man fick rätt eller ej. Man får bara använda den 3 gånger. Jag har testat den 3 gånger oxå. Så därför måste jag verkligen skriva in rätt svar. Annars måste jag göra om hela duggan
Ok, ser nu felet:
k=k+1 ska vara sist i loopen (vilket Laguna såg)!
while summa<=129:
summa=summa+1/np.log(k-3)
k=k+1
... vilket ger 762 istället!
summa=0
k=33
while summa<=129:
summa=summa+1/np.log(k-3)
k=k+1
print(k)
är detta den rätta koden? Jag måste få det bekräftat för jag har inga ”How did I do” kvar.
Det var länge sedan jag läste integraler. Jag kan inte med säkerhet säga att det är korrekt.
Vad fick du för svar?
Hej Zorikan, testa att köra följande variant av din kod (jag har bara lagt till en utskrift)
Förklara vad koden gör de sista looparna och notera särskilt var utskriften är placerad i loopen:
import numpy as np
summa=0
k=33
while summa <= 129:
summa=summa+1/np.log(k-3)
print(f'Summan är {summa} för kvärdet {k}')
k=k+1
Vad händer om du också skriver ut k-värdet en sista gång utanför loopen som du försökte från början? Hur kan man på ett enkelt sätt åtgärda problemet?
Visa spoiler
"Rätt svar" på den här uppgiften är förövrigt , för är summan större än .
Detta är fel. Jag får det till 762.
min kod är precis samma.
summa=0
k=33
while summa<129:
summa=summa+1/np.log(k-3)
k=k+1
print(k)
D4NIEL skrev:Hej Zorikan, testa att köra följande variant av din kod (jag har bara lagt till en utskrift)
Förklara vad koden gör de sista looparna och notera särskilt var utskriften är placerad i loopen:
import numpy as np summa=0 k=33 while summa <= 129: summa=summa+1/np.log(k-3) print(f'Summan är {summa} för kvärdet {k}') k=k+1
Vad händer om du också skriver ut k-värdet en sista gång utanför loopen som du försökte från början? Hur kan man på ett enkelt sätt åtgärda problemet?
Visa spoiler
"Rätt svar" på den här uppgiften är förövrigt , för är summan större än .
Det D4niel säger om rätt svar (i spoilern) håller jag inte med om, för det vi vill ha är ett n sådant att summan > 129.
Import math
summa=0
k=33
while summa <=129 and k<=762:
k=k+1
summa=summa+1/math.log(k-3)
print(summa)
man kan ju variera värdet på summan och k. Det är enklare att se vad summan blir exakt om man ändrar den till 130 tex. Och skriver tex k<=761 så blir summan 128. Om k=762 så blir summan 129.09 och k=763 blir summan 129.1. Så k=762 är definitivt rätt svar.
men svårt att bekräfta det mer än på detta sättet.
Det slarvas hela tiden här, inte bara av dig.
k börjar som 33, och sedan innan man räknar ut första termen så sätts den till 34. Det är inte det vi ska räkna ut. Vi ska börja på 33.
Kolla min senaste kod. Den är 100%
Jag har frågat säkert 3 personer om detta och koden kan inte vara mer korrekt. Har frågat andra chalmerister och lite annat folk
Laguna skrev:
Det D4niel säger om rätt svar (i spoilern) håller jag inte med om, för det vi vill ha är ett n sådant att summan > 129.
Jag tror det finns några villkor till på . Hursomhelst.
för är summan , för är summan
762 eller 763 tycker jag är fel eftersom det varken är det minsta eller största för vilket vi går över eller under 129.
Varför tar du inte bara print(summa)?
Frågar du mig om något? :)
Jag undrar bara varför min print(summa) och din print summa inte ger samma svar. Verkar som ett k nedåt bara.
Annars är våra koder lika. Jag förstår inte riktigt din print summa.
jag har bara hållt på med programmering en dryg vecka nu. Så jag hoppas ni förstår
Det som eventuellt skiljer våra exempel åt är NÄR du adderar +1 till k
I den kod jag föreslog att du skulle testa skrivs summan ut för varje k-värde INNAN man adderar +1 till variabeln .
Låt oss analysera rad för rad
Först sätter vi variablerna summa och k till ursprungsvärdena, notera att när vi går igenom loopen första gången.
summa=0
k=33
Sedan räknar vi ut den första delsumman, som då blir då n=33 och summan bara har en enda term.
summa=summa+1/np.log(k-3)
Sedan skriver vi ut summan för första gången
print(f'Summan är {summa} för kvärdet {k}')
Summan är 0.29401410379520604 för kvärdet 33
Kontrollera var i loopen du lägger till 1!
Ja jag förstår ditt resonemang nu.
jag ska testa ditt sätt nu fast jag kommer ändå printa(summa) enda jag testar nu är att byta plats på det sättet som du skrev din kod på.
K=k+1 alltså
Okej detta oroar mig lite. Nu får jag precis samma svar som du.
varför spelar det roll vilken rad k och summan är inom loppen?
Om summan är 4 och k är 3 och du ska räkna ut summan=summan + 3k så får du
Om summan är 4 och k är 3 och du lägger till +1 till k före du räknar ut summan räknar du egentligen ut summan när k är 4
Det som "ligger i" variabeln k är det som används i summan. Lägger du till +1 till k blir det ju ett annat, större tal än det var innan.
glömde säga det att din kod stämde Daniel. Man skulle bara byta plats på k=k+1, och summa=summa....
Men jag fattar faktiskt inte varför det spelar någon roll. Jag fattar att det blir ett större k när man lägger in den i summan om man k=k+1 kommer först. Jag tror jag inte helt enkelt fattar varför man plussar k med 1 egentligen.
Det vi vill göra är att summera termerna för stigande k. Alltså
summa = 0
summa = summa + 1/ln(33-3)
summa = summa + 1/ln(34-3)
summa = summa + 1/ln(35-3)
osv. tills summan överskrider 129.
Om vi använder k så blir det
summa = 0
k = 33
summa = summa + 1/ln(k-3)
k = k+1
summa = summa + 1/ln(k-3)
k = k+1
summa = summa + 1/ln(k-3)
osv. Om vi inte adderar 1 till k mellan stegen så stannar k kvar på 33. Det är inte det den ursprungliga summan uttrycker.
När vi nu har två rader kod som upprepas hela tiden så kan vi lägga dem i en while-loop, som kollar när summan har överskridit 129.
Okej det var bra förklarat!
att den andra raden (k=k+1) är till för nästa loop!
Man får välja om man lägger k=k+1 före eller efter den andra raden. Om den ligger före så får man tänka efter så att k är 33 första gången det används i ln(k-3) och alltså sätta k till 32 först. Om den ligger efter så har man lagt till 1 en gång i onödan när man är klar.