Python

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

Moderator: Moderator 1

Post Reply
User avatar
Inwatto
Lutetiummedlem
Posts: 1771
Joined: 08 Jul 2021, 18:14
Location: Skåne

Re: Python

Post by Inwatto »

while-exemplet summerar 1..n, medan for-exemplet summerar 1..n+1, dvs inte samma summa. Åtminstone om for fungerar likadant i Python som i alla andra språk, vilket det inte verkar göra enligt ditt inlägg tidigare...

Varför ökar du i med 1 inom repetitionen; det gör ju for-satsen också!
User avatar
Nobel
Germaniummedlem
Posts: 3376
Joined: 10 May 2021, 19:48

Re: Python

Post by Nobel »

Exempel: ett program som beräknar kapitalet efter ett antal år med en viss räntesäts.

Code: Select all

# Ett program som beräknar kapitalet efter ett antal år med en viss räntesäts
ränta = float(input('Räntesats? '))
n = int(input('Antal år? '))
kapital = 1000
for år in range(1, 1+n, 1):
    kapital = kapital + kapital * 0.01 * ränta
    print(f'{år:3}{kapital:6.0f}')
1. Användaren får ange räntan som ett decimaltal (ex, 1.5)
2. Användaren får ange det antalet år som pengarna ska låtas växa (ex, 5)
3. Pengarna som säts in är 1000 kr
4. För antalet år i spannet som angivits, börjar på 1, slutar på 1+n, och varje gång loopen körs ska det ske en ökning med 1
5. kapital = kapital + den äkning i värdet av kapitalet som uppstår med räntan, kapital * 0.01 (0.01 för att räntan anges i procent) * ränta
6. Skriv ut, som en f-sträng, antalet år som pengarna får växa, och kapitalet utan decimaltal
7. Loopen upprepas 5 gånger
'cause the freak inside controls my mind
User avatar
Nobel
Germaniummedlem
Posts: 3376
Joined: 10 May 2021, 19:48

Re: Python

Post by Nobel »

Inwatto wrote: 06 Jan 2022, 10:47 while-exemplet summerar 1..n, medan for-exemplet summerar 1..n+1, dvs inte samma summa. Åtminstone om for fungerar likadant i Python som i alla andra språk, vilket det inte verkar göra enligt ditt inlägg tidigare...

Varför ökar du i med 1 inom repetitionen; det gör ju for-satsen också!
Ja, testade att köra for-loopen utan i = i + 1 och den verkar bete sig på samma sätt som om i = i + 1 vore där.

Code: Select all

n = int(input('Talet n? '))
sum = 0
for i in range(1, n+1):
    sum = sum + i*i
print('Summan =', sum)
Så steghöjningen av "i" i for-satsen är oberoende av att "i" ska behöva höjas i for-loopen? Det underlättar att ta bort det överflödiga och få samma resultat! Hoppas att jag förstår det lite bättre nu.

Tror att for-loopen slutar så fort det sista värdet i loopen är nådd. Ex, for i in range(1, 3, 1), där börjar satsen räkna på 1, loopar, 2, loopar, 3, avbryts. Så om användaren matar in att loopen ska köras 2 gånger så krävs det att sista värdet i loopen blir n+1. Medan en while-loop i detta exempel även körs en sista gång när k <= n, om nu n = 3 och k = 1.
'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 »

Nobel wrote: 06 Jan 2022, 09:12
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!
Jag testar bl.a dina program som du postat här o försöker förstå hur det funkar.
Blogg, dagbok och hemsida: https://www.richardhandl.com/
User avatar
Inwatto
Lutetiummedlem
Posts: 1771
Joined: 08 Jul 2021, 18:14
Location: Skåne

Re: Python

Post by Inwatto »

Jag har ingen Python i min dator, så jag kan inte testa själv, men det blir inte samma resultat för högre värden på n om du ökar i inom loopen fastän i ökas av for. Du får summan av 1+3+5+7+..n istället för 1+2+3+4..n . Det är jag säker på.

Däremot undrar jag fortfarande om det inte ska stå for i in range (1,n) för en loop på 1..n ggr. Men, litar på att boken visar hur det ska vara i Python.
User avatar
Nobel
Germaniummedlem
Posts: 3376
Joined: 10 May 2021, 19:48

Re: Python

Post by Nobel »

I uppgiften stod det; Skriv ett program som läser in ett heltal n och som beräknar summan, dvs. 1 + 4 + 9 + 16 +...+n^2. Båda programmen verkar bete sig på samma sätt, ska testa att mata in höga siffror och se om programmet räknar annorlunda. Får samma resultat om jag matar in 12345. Om jag matar in 1234567890 står datorn bara och tuggar, antar att det tar lång tid att räkna ut.

Får hoppas att författaren till boken vet vad han gör. :D Om jag tar bort bort +1 från for i in range(n+1) så får jag inte det beteendet på programmet som jag vill ha.

Code: Select all

n = int(input('Talet n? '))
sum = 0
for i in range(1, n):
    sum = sum + i*i
    i= i + 1
print('Summan =', sum)
Om n = 2 får jag summan 1, vilket inte stämmer med vad jag förväntar mig, att loopen ska köras 2 ggr och summerar 1 + 4 = 5, det innebär att loopen endast körts 1 gång. n + 1 behövs för att loopen ska köras det antal loopar jag ber programmet att göra.
'cause the freak inside controls my mind
User avatar
Nobel
Germaniummedlem
Posts: 3376
Joined: 10 May 2021, 19:48

Re: Python

Post by Nobel »

Inwatto wrote: 06 Jan 2022, 11:29 Jag har ingen Python i min dator, så jag kan inte testa själv, men det blir inte samma resultat för högre värden på n om du ökar i inom loopen fastän i ökas av for. Du får summan av 1+3+5+7+..n istället för 1+2+3+4..n . Det är jag säker på.

Däremot undrar jag fortfarande om det inte ska stå for i in range (1,n) för en loop på 1..n ggr. Men, litar på att boken visar hur det ska vara i Python.
Du kan köra Python online! https://www.programiz.com/python-progra ... -compiler/
Ingen registrering krävs.
# Online Python compiler (interpreter) to run Python online.
# Write Python 3 code in this online editor and run it.

Testade att köra mitt program i den och det fungerar.
'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, 11:23
Nobel wrote: 06 Jan 2022, 09:12
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!
Jag testar bl.a dina program som du postat här o försöker förstå hur det funkar.
Blev tipsad om en IDE för Python som är pedagogisk och lätt att använda - Thonny. Där går det att se vad som händer i programmet med en funktion som heter Debug current script.
'cause the freak inside controls my mind
User avatar
Nobel
Germaniummedlem
Posts: 3376
Joined: 10 May 2021, 19:48

Re: Python

Post by Nobel »

Skriv ett program som visar en tabell med värden för uttrycket 2x^2-5x+1. Låt programmet skriva ut värdet av uttrycket för x-värdena -10, -9, -8, -7, osv. upp till 10.

Code: Select all

for x in range(-10, 11, 1):
    y = 2 * x ** 2 - 5 * x + 1
    print(f'{x:3d}{y:6d}')
1. För x i intervallet -10 till 11, med en räknare 1 (räknaren 1 är egentligen överflödig, behövs inte eftersom att stegräknare +1 är standard)
2. y = ekvationen
3. Skriv ut x-värdet och y-värdet.
'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 programmet i föregående uppgift så att värdet av uttrycket istället skrivs ut för alla x i intervallet -1 till +1 med steget 0.1, dvs. för -1.0, -0.9 ... 0.9, 1.0. Tips: Dividera räknaren med 10.

Code: Select all

for v in range(-10, 11):
    x = v/10
    y = 2 * x ** 2 - 5 * x + 1
    print(f'{x:1.1f}{y:7.2f}')
1. For-sats. För v i intervall -10, 11
2. Dela v med 10 och ge variabeln x värdet.
3. Beräkna y
4. Skriv ut värdet på x som ett decimaltal med en decimal och värdet på y som ett decimaltal med två decimaler
'cause the freak inside controls my mind
User avatar
Nobel
Germaniummedlem
Posts: 3376
Joined: 10 May 2021, 19:48

Re: Python

Post by Nobel »

Nästlade repetitionssatser. Målet är att skriva ett program som skriver ut plustecken. Programmet börjar med att fråga hur många rader som ska skrivas ut. Det kan t.ex. se ut såhär:

Code: Select all

Antal rader? 5
+
++
+++
++++
+++++ 
Här följer programmet:

Code: Select all

# Plustecken
n = int(input('Antal rader: '))
for i in range(1, n+1):
    for j in range(1, i+1):
        print('+', end='')
    print()
1. Användaren får ange hur många rader hen vill att programmet ska skriva ut.
2. För i i intervallet 1 till n+1 ska fölande for-sats exekveras.
3. För j i intervallet 1 till i+1 ska ett plus skrivas ut följt av end='', alltså ska inget radbyte ske efter utskriften.
4. printfunktionen anropas tom endast för att ge ett radbyte när den inre for-loopen terminerat.
'cause the freak inside controls my mind
User avatar
Nobel
Germaniummedlem
Posts: 3376
Joined: 10 May 2021, 19:48

Re: Python

Post by Nobel »

Uppgift. Ändra i programmet så att det istället skrivs ut n stycken +-tecken på första raden, n-1 plustecken på andra raden osv. tills det på sista raden skrivs ut ett plustecken. Tips: Använd ett negativt steg i den yttre for-satsen.

Code: Select all

# Plustecken
n = int(input('Antal rader: '))
for i in range(n, 0, -1):
    for j in range(1, i+1):
        print('+', end='')
    print()
1. Användaren för ange ett heltal antal rader den vill att programmet ska skriva ut.
2. För i i intervallet n till 0, med räknaren negativ -1 loopa.
3. För j i intervallet 1 till i+1, skriv ut +-tecken och avsluta utskriften utan att byta rad.
4. Skriv ut en tom rad för att göra ett radbyte i utskriften.
'cause the freak inside controls my mind
Post Reply