Python

Om att köpa dator, lösa datorproblem och tipsa om dataspel.

Moderator: Moderator 1

User avatar
Nobel
Germaniummedlem
Posts: 3376
Joined: 10 May 2021, 19:48

Re: Python

Post by Nobel »

Exempel. Anta att en viss typ av vattenalger under gynsamma förhållanden förökar sig så fort att de för varje dygn fördubblar den area de täcker. Anta att man i en liten sjö råkat få in såna alger. Efter en dag täcker de en area av 0.01 m*2, sjöns totala area är 10 000 m^2. Hur lång tid tar det innan hela sjön är täckt med alger?

Code: Select all

# Utbredning av alger
totalArea = 10000
area = 0.01
dygn = 1
while area < totalArea:
    area *= 2
    dygn += 1
print(f'Sjön blir täckt efter {dygn} dygn')
1. Kommentar Utbredning av alger
2. Tilldela variabeln totalArea till 10 000
3. Tilldela variabeln area 0.01
4. Tilldela variabeln dygn 1
5. While-loopen testar villkoret är arean av alger mindre än sjöns totala area? 0.01 < 10 000. Beräkningarna i loopen utförs. arean av alger dubblas efter ett dygn area *= 2 betyder area = area * 2, så algarean fördubblas. Sedan lägger vi till 1 till dygn, eftersom att tillväxthastigheten är att arean fördubblas per dygn.
6. Loppen fortsätter att upprepa sig och testa om area < totalArea. När area > totalArea bryts loopen och antalet dagar det tog har räknats.
7. Skriv ut hur många dagar det tar för algerna att täcka hela sjön med denna modellen.
Svar: Det tar 21 dagar.
'cause the freak inside controls my mind
User avatar
Nobel
Germaniummedlem
Posts: 3376
Joined: 10 May 2021, 19:48

Re: Python

Post by Nobel »

Anta att en boll som släpps ovanför ett golv vid varje studs förlorar 30% av sin höjd. Skriv ett program som beräknar hur många gånger en sådan boll studsar till den är stilla. Med stilla menas att den inte studsar högre än 1 cm.

Code: Select all

h = int(input('Från vilken höjd i cm släpps bollen från? '))
counter = 0

while h >= 1:
    h *= 0.7
    counter += 1
print(counter)
1. Användaren matar in i cm hur högt bollen släpps ifrån, värdet sparas i variabeln h. Anta att vi skriver in 100
2. Variabeln counter (mätare) skapas och ges värdet 0.
3. Medan h >= 1 ska loopen köras. Villkåret 100 >= 1 är sant, därför körs koden i while-loopen.
4. Eftersom att bollen förlorar 30% av sin höjd vid varje studs multipliceras h med 0.7
5. counter räknar en studs
6. Loopen körs igen och repeteras tills det att h blir lika med eller mindre än 1
7. Programmet skriver ut hur många studsar det blev
Svar: Om vi släpper bollen från 1 meters höjd, alltså 100 cm, så studsar den 13 ggr.
'cause the freak inside controls my mind
User avatar
Richard
Administratör
Posts: 8201
Joined: 10 May 2021, 13:45
Location: Ängelholm
Contact:

Re: Python

Post by Richard »

Den här sidan ska jag nog börja gå igenom, den verkar bra; https://www.programmerapython.se/
Blogg, dagbok och hemsida: https://www.richardhandl.com/
User avatar
Nobel
Germaniummedlem
Posts: 3376
Joined: 10 May 2021, 19:48

Re: Python

Post by Nobel »

Ja, materialet verkar användarvänlig! Tack för tipset!
'cause the freak inside controls my mind
User avatar
Nobel
Germaniummedlem
Posts: 3376
Joined: 10 May 2021, 19:48

Re: Python

Post by Nobel »

Break-satsen. När en break-sats exekveras avbryts while-satsen och programmet hoppas till den första sats som kommer efter while-satsen.

Code: Select all

# Beräkning av summan 1+2+3+ ... +n
while True:
    n = int(input('n?, skriv ett tal <= 0 för att avsluta '))
    if n <= 0:
        break
    summa = 0
    k = 1
    while k <= n:
        summa += k
        k += 1
    print('Summan blir', summa)
1. while True är en evighetsloop.
2. I evighetsloopen frågar programmet användaren om att mata en ett heltal, och att programmet kan avslutas genom att ange ett negativt tal eller 0
3. Om n <= 0, terminera while-loopen
4. Skapa variabeln summa och ge den värdet 0
5. Skapa variabeln k och ge den värdet 1
6. while k <= n är en loop som testar om k är mindre än eller lika med n.
7. Om användaren skriver in 3 testas villkoret k <= n, alltså 1 <= 3 då körs loopen. Summa ökar med 1 och adderas till summa. Detta repeteras tills det att k > n. När detta händer avbryts while-loopen.
8. PRogrammet hoppar tillbaka till while-True-loopen och fortsätter att fråga användaren om att mata in ett nytt nummer.
9. Om användaren matar in 0, då avslutas while-True-loopen eftersom att break-satsen exekveras. Programmet stängs av.
'cause the freak inside controls my mind
User avatar
Nobel
Germaniummedlem
Posts: 3376
Joined: 10 May 2021, 19:48

Re: Python

Post by Nobel »

Modifiera det tidigare programmet med bollen som studsar på marken och för varje studs förlorar 30% av sin höjd. PRogrammet ska avslutas när användaren skriver ett negativt tal.

Code: Select all

while True:
    h = int(input('Från vilken höjd i cm släpps bollen? '))
    if h < 0:
        break
    counter = 0
    while h >= 1:
        h *= 0.7
        counter += 1
    print(counter)
1. Starta en evighetsloop while-True
2. Användare får ange ett heltal som sparas i variabeln h.
3. Om användare anger negativt heltal, break-satsen exekveras och evighetsloopen while-True avbryts
4. Variabeln counter tilldelas värdet 0, den ska användas för att mäta hur många gånger bollen studsar
5. while-loop som testar villkoret h >= 1.
6. h multipliceras med 0.7 (30% minskning av längden)
7. 1 adderas till counter
8. While h >= 1-loopen upprepas tills villkoret är falskt, do exekveras while-True-loopen igen
'cause the freak inside controls my mind
User avatar
Nobel
Germaniummedlem
Posts: 3376
Joined: 10 May 2021, 19:48

Re: Python

Post by Nobel »

For-sats med range.

Code: Select all

for i in range(först, sist, steg):
	en eller flera indragna satser
först, sist, och steg måste vara heltal.

Om man utelämnar argumentet steg, blir steg automatiskt 1.

Om man bara ger ett argument tolkas det som argumentet sist. Argumenten först och steg blir då automatiskt 0 respektive 1.

Variabeln i får vardet först på första varvet, först+steg på det andra, först+steg+steg på det tredje, osv.

Om steg > 0 fortsätter repetitionen bara så länge som i < sist.
Om steg < 0 fortsätter repetitionen bara så länge som i > sist.

Efter sista varvet har variabeln i det värde som den hade på sista varvet.
'cause the freak inside controls my mind
User avatar
Nobel
Germaniummedlem
Posts: 3376
Joined: 10 May 2021, 19:48

Re: Python

Post by Nobel »

Exempel. Beräkning av x upphöjt till n med hjälp av en for-loop

Code: Select all

# Beräkning av x upphöjt till n
x = float(input('x? '))
n = int(input('n? '))
r = 1
for i in range(n):
    r = r * x
print('Resultat:', r)
1. Användaren anger ett tal som lagras i variabeln x som ett decimaltal (anta att vi anger 3)
2. Användaren anger ett heltal som lagras i variabeln n som ett heltal (anta att vi anger 3)
3. Variabeln r tilldelas värdet 1
4. For-satsen säger att för i i spannet n (3) så ska r = r * x beräknas, alltså r = 1 * 3, vilket ger 3.
5. Loopen körs igen, nu är r = 3, alltså r = 3 * 3 vilket blir 9.
6. Loopen körs igen, nu är r = 9, alltså r = 9 * 3 vilket blir 27.
8. Resultatet skrivs ut.
'cause the freak inside controls my mind
User avatar
Richard
Administratör
Posts: 8201
Joined: 10 May 2021, 13:45
Location: Ängelholm
Contact:

Re: Python

Post by Richard »

Nu har jag blivit helt besatt av Python, ska sitta o lära mig hela dagen...
Blogg, dagbok och hemsida: https://www.richardhandl.com/
User avatar
Nobel
Germaniummedlem
Posts: 3376
Joined: 10 May 2021, 19:48

Re: Python

Post by Nobel »

Detta är en uppgift jag inte lyckades att lösa, så var tvungen att få hjälp av facit. Ska nu försöka bena ut hur programmet fungerar :lol: Det är uppgift 4.2, programmet ska skrivas med en for-loop istället för en while-loop.

Programmet i 4.2:

Code: Select all

n = int(input('n? '))
summa = 0
k = 1
while k <= n:
    summa = summa + k * k
    k += 1
print('Produkten är', summa)
Samma program men med en for-loop:

Code: Select all

n = int(input('Talet n? '))
sum = 0
for i in range(1, n+1):
    sum = sum + i*i
    i= i + 1
print('Summan =', sum)
1. Användaren får ange ett tal, n, som sparas i variabeln n.
2. Variabeln summa tilldelas värdet 0.
3. För värdet i i spannet 1 till n+1 ska forloopen köras. 1 är första värdet när loopen körs, sista värdet blir n+1.
4. Summan beräknas som summan = summan + i x i, i är första gången loopen körs = 1
Förstår fortfarande inte, ska låta det ligga ett tag. Har försökt att följa beräkningarna med en debugger, men blir fortfarande inte klok på det.
'cause the freak inside controls my mind
User avatar
Nobel
Germaniummedlem
Posts: 3376
Joined: 10 May 2021, 19:48

Re: Python

Post by Nobel »

Richard wrote: 06 Jan 2022, 09:04 Nu har jag blivit helt besatt av Python, ska sitta o lära mig hela dagen...
Ja, vad roligt! Python är kul!
'cause the freak inside controls my mind
User avatar
Nobel
Germaniummedlem
Posts: 3376
Joined: 10 May 2021, 19:48

Re: Python

Post by Nobel »

Tror jag förstått lite bättre hur denna kod fungerar nu. Om du hittar något fel, skriv gärna det!

Code: Select all

n = int(input('Talet n? '))
sum = 0
for i in range(1, n+1):
    sum = sum + i*i
    i= i + 1
print('Summan =', sum)
1. Användaren anger ett heltal n (till exempel 2)
2. Variabeln summa skapas och ges värdet 0
3. Värdet n (2) sätts in i funktionen range och ger range(1, 3)
4. Då i = 1 beräknas summan till 1
5. i ökas med 1
6. for-loopen fortsätter, nu är i = 2
7. sum = 1 + 2 * 2 = 5
8. i ökas med 1 och blir 3
9. for-loopen bryts då n = 3
10. Summan skrivs ut
'cause the freak inside controls my mind
Post Reply