Hjälp med nybörjaruppgift i Python

Permalänk
Medlem

Hjälp med nybörjaruppgift i Python

Hej!

Jag har precis börjat plugga programmeringen och har verkligen kört fast. Här är en bild på uppgiften https://imgur.com/E9lEdr6 , där man ska skriva ett Python-program som läser in ett godtyckligt antal födelseårtal tills dess att talet noll matats in. Hitintills har jag fått ihop följande:

antal_ar=0 summa_ar=0 max_ar=0 min_ar=110 inmatat_ar=-1 while inmatat_ar!=0 : print("Mata in födelseårtal. För att avsluta, ange talet 0."). inmatat_ar = int(input("Årtal: 1998, 1932, 1903, 2012, 2010, 1963, 2020, 0")) alder=(2020-inmatat_ar) if alder<0 or alder>110 and alder!=2020 : print("Orimligt årtal, försök igen.") else: if inmatat_ar > 0: antal_ar=+1 summa_ar=summa_ar + alder if alder < min_ar: min_ar = alder if alder > max_ar: max_ar = alder

Ett felmeddelande ges för 'inmatat_ar = int(input("Årtal: 1998, 1932, 1903, 2012, 2010, 1963, 2020, 0"))', men försökt ändra det utan framgång. Jag skulle därför hjärtligt uppskatta lite hjälp om var det har gått snett.

Tack så hemskt mycket på förhand!

La till [code]-taggar
Permalänk
Hedersmedlem
Skrivet av Phermo:

Hej!

Jag har precis börjat plugga programmeringen och har verkligen kört fast. Här är en bild på uppgiften https://imgur.com/E9lEdr6 , där man ska skriva ett Python-program som läser in ett godtyckligt antal födelseårtal tills dess att talet noll matats in. Hitintills har jag fått ihop följande:
[...]

Börjar med tips att kasta in koden mellan [code] block hedanefter så blir det lättare att läsa

Gällande din fråga så ser det ut som du missförstått input() functionen. Den inväntar en användares textinput och lagrar i variablen.
Så du vill förmodligen bara ha

inmatat_ar = int(input())

Hoppas det kan peka dig i rätt riktning

Visa signatur

Dator, MOBO: Asus X99-A, CPU: Intel I7 6800k (3.4GHz), GPU: Geforce PNY 2070 Super, RAM: 4x8GB Corsair Vengeance LPX 2400MHz, OS-HDD: Intel 750 PCIe 400GB, PSU: EVGA SuperNOVA G2 850W

Permalänk
Medlem

Tack för tipset, ska tänka på det nästa gång!

Okej, då antog jag att födelseåren ska matas in coden under ''while'' istället då, men det ger även den ett felmeddelande. Ska man mata in födelseår ens eller kommer loopen generera dem inom de regler man satt? Är verkligen helt vilsen i detta.

Permalänk
Medlem

Ja, du ska mata in födelseår manuellt.
Programmet skriver ut: Mata in födelseårtal. För att avsluta, ange talet 0.
Då ska du manuellt skriva t.ex.: 1980 (enter)
int(input()) läser det du skrivit, konverterar värdet till en integer, sätter det till variablen, och sedan fortsätter exekveringen av resten av programmet.

Visa signatur

Redbox: Asrock B650 Lightning ATX, 7800x3D -20CCO, XFX 6950XT, 2x32GB Corsair Vengence 6400 CL32, WD SN770 2TB, Corsair RMe 1000, Lian Li Lancool 216, Peerless Assassin 120 SE
Purpbox: Z87-Pro, I5 4670K@4.2, Sapphire 290 TRI-X, 2x8GB Crucial Tactical@stock, Deep Silence 1
Samsung Evo 250+500GB + QVO 1TB, 2x1TB 7200RPM backup/lagring
Det var bättre förr: E5300 2600MHz -> 3640MHz, Celeron 300A -> 450MHz

Permalänk
Skrivet av Phermo:

Okej, då antog jag att födelseåren ska matas in coden under ''while'' istället då, men det ger även den ett felmeddelande. Ska man mata in födelseår ens eller kommer loopen generera dem inom de regler man satt? Är verkligen helt vilsen i detta.

Om du skriver

x = int(input("Vad är svaret? "))

skriver Python ut texten "Vad är svaret?" på skärmen och väntar på att användaren skriver in något. T.ex. kanske användaren skriver in 2000. Sedan omvandlar Python detta till en int och sparar det i variabeln x. Avsluta gärna texten i "input" med ett mellanrum för annars skrivs frågan ihop med svaret utan mellanrum mellan fråga och svar.

Observera att programmet kraschar om användaren skriver in något konstigt som inte är ett heltal. Det går att skriva in 2000, 3000, 0 och -500, men skriver man in 3.14, 2000 e.Kr. eller 1 januari 1990 kraschar programmet. När du blir mer van vid programmering får du göra så att programmet inte kraschar, men som nybörjare kanske det räcker med att veta att du måste skriva in något som programmet förstår.

Du har skrivit

while inmatat_ar!=0 : print("Mata in födelseårtal. För att avsluta, ange talet 0.").

vilket innebär att Python kommer att tala om för dig att du ska skriva in ett födelseår, men Python ger dig ingen möjlighet att skriva in något födelseår utan upprepar bara uppmaningen i all evighet. Dessutom är det en felplacerad punkt sist på andra raden, vilket får Python att krascha.

Tänk på att Python tillåter åäö i variabelnamn, så du kan kalla variabeln för inmatat_år istället för inmatat_ar.

Permalänk
Medlem

Jag antar att du upptäckte att där var en punkt i slutet av print-raden?

Visa signatur

Redbox: Asrock B650 Lightning ATX, 7800x3D -20CCO, XFX 6950XT, 2x32GB Corsair Vengence 6400 CL32, WD SN770 2TB, Corsair RMe 1000, Lian Li Lancool 216, Peerless Assassin 120 SE
Purpbox: Z87-Pro, I5 4670K@4.2, Sapphire 290 TRI-X, 2x8GB Crucial Tactical@stock, Deep Silence 1
Samsung Evo 250+500GB + QVO 1TB, 2x1TB 7200RPM backup/lagring
Det var bättre förr: E5300 2600MHz -> 3640MHz, Celeron 300A -> 450MHz

Permalänk
Medlem

@e1m1 Ja det var ett av felen vilket är fixat nu, tack så mycket för hjälpen!

@Kommenterande 2 Tack för bra beskrivning, efter all hjälp har jag blivit lite klokare och fått bukt på de flesta problemen. Får dock fortsatt felmeddelanden på flera rader, även efter ändringar. Nu reagerar den på alder=(2020-inmatat_ar) samt 'if', 'or', och 'and' raden. Borde inte den raden vara komplett?

Tack för all hjälp hittils trots dessa hjärndöda frågor!

Permalänk
Medlem

@Phermo raden borde vara korrekt givet att du inte ändrat den.

Det andra funkar också för mig på en onlinekompilator givet att jag indenterar koden.

Visa signatur

Redbox: Asrock B650 Lightning ATX, 7800x3D -20CCO, XFX 6950XT, 2x32GB Corsair Vengence 6400 CL32, WD SN770 2TB, Corsair RMe 1000, Lian Li Lancool 216, Peerless Assassin 120 SE
Purpbox: Z87-Pro, I5 4670K@4.2, Sapphire 290 TRI-X, 2x8GB Crucial Tactical@stock, Deep Silence 1
Samsung Evo 250+500GB + QVO 1TB, 2x1TB 7200RPM backup/lagring
Det var bättre förr: E5300 2600MHz -> 3640MHz, Celeron 300A -> 450MHz

Permalänk

Om Python klagar på att något är fel med den raden, kan det i själva verket vara så att det saknas något annat på en tidigare rad.

Exempel:

print("Hej" if True: print("Hej igen")

Felet här är att en slutparentes saknas på första raden. I felmeddelandet ser man dock andra raden:

File "hej.py", line 2 if True: ^ SyntaxError: invalid syntax

Detta är förvirrande eftersom den som ser felmeddelandet tittar på fel rad i Python-filen. Jag tänker mig att det skulle kunna vara något liknande för dig, alltså att det är ett fel på en tidigare rad än den du ser i felmeddelandet.

Om du inte hittar felet, föreslår jag att du skriver ut hela koden här så kan någon annan försöka hitta felet.

Permalänk
Medlem

Hej! Du har en överflödig punkt på tidigare linje:

print("Mata in födelseårtal. För att avsluta, ange talet 0.").