Python
Moderator: Moderator 1
Re: Python
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å!
Varför ökar du i med 1 inom repetitionen; det gör ju for-satsen också!
Re: Python
Exempel: ett program som beräknar kapitalet efter ett antal år med en viss räntesäts.
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
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}')
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
Re: Python
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.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å!
Code: Select all
n = int(input('Talet n? '))
sum = 0
for i in range(1, n+1):
sum = sum + i*i
print('Summan =', sum)
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
Re: Python
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/
Re: Python
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.
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.
Re: Python
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.
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.
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)
'cause the freak inside controls my mind
Re: Python
Du kan köra Python online! https://www.programiz.com/python-progra ... -compiler/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.
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
Re: Python
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
Re: Python
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.
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.
Code: Select all
for x in range(-10, 11, 1):
y = 2 * x ** 2 - 5 * x + 1
print(f'{x:3d}{y:6d}')
2. y = ekvationen
3. Skriv ut x-värdet och y-värdet.
'cause the freak inside controls my mind
Re: Python
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.
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
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}')
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
Re: Python
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:
Här följer programmet:
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.
Code: Select all
Antal rader? 5
+
++
+++
++++
+++++
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()
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
Re: Python
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.
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.
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()
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