funktioner
hej
jag behöver hjälp med funktioner i python när det gäller globala och lokala funktioner. sen vad som ska bytas innen i funktionen om man tar den här exempel:
man ska skriva funktionen:
jag har gjort den men det jag har fortfarande svårt med är huvudprogrammet och hur ska man byta allt inne i fnktionen. jag kan inte se fortfarande någon mönster.
Då du skriver
year= intInput("ange ett år :")
så kommer du anropa funktionen intInput med värdet på variabeln text satt till "ange ett år :". Denna text kommer därmed aldrig ha någon betydelse i programmet eftersom att det är i funktionen intInput som användaren faktiskt ombeds fylla i någonting som har betydelse. Om du vill ha det på det viset, dvs. att intInput hanterar indatan så borde du istället skriva
year= intInput()
samt ta bort "text" som inparameter till intInput. Om du föredrar att ha datahanteringen utanför funktionen (vilket jag rekommenderar) föreslår jag att du istället skriver
def intInput(text):
year= int(text).strip())
return year
[---]
indata= input("ange ett år :")
year= intInput(indata)
Då du sedan kommer till läget att det visar sig att användaren angivet ett icke-skottår så anropar du isLeapYear ånyo med den nya inparametern "ange ett år :". "ange ett år :" är det som programmet tror är ett årtal. Du bör ersätta din "elif" med en "else".
Sedan bör isLeapYear alltid returnera ett returnvärde; i den formulering du har gör den bara så om året är jämnt delbart på 4 men inte 400 eller 100. Ta bort en tab på sista raden i funktionen.
Det väsentliga är att funktionerna ska vara väl definierade i vad de gör, och intInput skall väl omvandla en given sträng av bokstäver till motsvarande heltalsvärde, så då bör man inte ha några nya input in i den funktionen; och isLeapyear skall ange om ett givet årtal är ett skottår, så den skall sätta ett värde på isleap efter vad som y är och sedan returnera isleap som returvärde.
Det är som i matematiken. Om f(x) = 3*x+2 så vill vi bara veta om vad ett visst y-värde blir för ett visst x-värde, så det skulle i Pythonform bli något i stil med
def f(x):
return 3*x+2
Jag är osäker på vad du menar med "byta allt inne i funktionen" så om jag inte besvarat din fråga bara skriv.
Bedinsis skrev:Då du skriver
year= intInput("ange ett år :")
så kommer du anropa funktionen intInput med värdet på variabeln text satt till "ange ett år :". Denna text kommer därmed aldrig ha någon betydelse i programmet eftersom att det är i funktionen intInput som användaren faktiskt ombeds fylla i någonting som har betydelse. Om du vill ha det på det viset, dvs. att intInput hanterar indatan så borde du istället skriva
year= intInput()
samt ta bort "text" som inparameter till intInput. Om du föredrar att ha datahanteringen utanför funktionen (vilket jag rekommenderar) föreslår jag att du istället skriver
def intInput(text):
year= int(text).strip())
return year
[---]
indata= input("ange ett år :")
year= intInput(indata)
Då du sedan kommer till läget att det visar sig att användaren angivet ett icke-skottår så anropar du isLeapYear ånyo med den nya inparametern "ange ett år :". "ange ett år :" är det som programmet tror är ett årtal. Du bör ersätta din "elif" med en "else".
Sedan bör isLeapYear alltid returnera ett returnvärde; i den formulering du har gör den bara så om året är jämnt delbart på 4 men inte 400 eller 100. Ta bort en tab på sista raden i funktionen.
Det väsentliga är att funktionerna ska vara väl definierade i vad de gör, och intInput skall väl omvandla en given sträng av bokstäver till motsvarande heltalsvärde, så då bör man inte ha några nya input in i den funktionen; och isLeapyear skall ange om ett givet årtal är ett skottår, så den skall sätta ett värde på isleap efter vad som y är och sedan returnera isleap som returvärde.
Det är som i matematiken. Om f(x) = 3*x+2 så vill vi bara veta om vad ett visst y-värde blir för ett visst x-värde, så det skulle i Pythonform bli något i stil med
def f(x):
return 3*x+2
Jag är osäker på vad du menar med "byta allt inne i funktionen" så om jag inte besvarat din fråga bara skriv.
ja, jag förstår lite men de anger y i den andra funktionen och den ska man lägga in istället för year. det är det som jag är osäker på att är det alltid så att man ska byta?
Aha. En funktion skall fungera för dig självt, utan något yttre beroende. Man skall kunna kopiera-och-klistra-in funktionen i vilken python-fil som helst och den skall ändå kunna användas.
Du kan ange vilket namn på inparametern som helst och det skulle ändå fungera. Det funktionen gör är att den tar värdet från inparametern, kallar den för det värde du angett, och utför det som funktionen nu skall göra med värdet.
Dessa funktioner är helt ekvivalenta:
def isLeapyear(year):
isleap = False
if year % 400 == 0:
isleap= True
elif year % 100 == 0:
isleap= False
elif year % 4 == 0:
isleap= True
return isleap
def isLeapyear(aar):
isleap = False
if aar % 400 == 0:
isleap= True
elif aar % 100 == 0:
isleap= False
elif aar % 4 == 0:
isleap= True
return isleap
def isLeapyear(y):
isleap = False
if y % 400 == 0:
isleap= True
elif y % 100 == 0:
isleap= False
elif y % 4 == 0:
isleap= True
return isleap
Vad man väljer att ha för namn på sina parametrar bör hjälpa någon som läser koden (vilket oftast är en själv) att förstå vad som koden egentligen gör för något.
I uppgiften har de dock specificerat att de vill att variabeln skall heta "y", så du får rätta dig därefter.
Bedinsis skrev:Aha. En funktion skall fungera för dig självt, utan något yttre beroende. Man skall kunna kopiera-och-klistra-in funktionen i vilken python-fil som helst och den skall ändå kunna användas.
Du kan ange vilket namn på inparametern som helst och det skulle ändå fungera. Det funktionen gör är att den tar värdet från inparametern, kallar den för det värde du angett, och utför det som funktionen nu skall göra med värdet.
Dessa funktioner är helt ekvivalenta:
def isLeapyear(year): isleap = False if year % 400 == 0: isleap= True elif year % 100 == 0: isleap= False elif year % 4 == 0: isleap= True return isleap def isLeapyear(aar): isleap = False if aar % 400 == 0: isleap= True elif aar % 100 == 0: isleap= False elif aar % 4 == 0: isleap= True return isleap def isLeapyear(y): isleap = False if y % 400 == 0: isleap= True elif y % 100 == 0: isleap= False elif y % 4 == 0: isleap= True return isleap
Vad man väljer att ha för namn på sina parametrar bör hjälpa någon som läser koden (vilket oftast är en själv) att förstå vad som koden egentligen gör för något.
I uppgiften har de dock specificerat att de vill att variabeln skall heta "y", så du får rätta dig därefter.
sen på huvudprogrammet när man ska anropa funktionen vad ska man tänka där? alltså vad som är regel? vilka man ska alltid anropa?
Du skall anropa med de inparametrar som funktionerna kräver. Vad du döpt de variablerna till bör vara namn som indikerar vad de har för värde.
Bedinsis skrev:Du skall anropa med de inparametrar som funktionerna kräver. Vad du döpt de variablerna till bör vara namn som indikerar vad de har för värde.
jag föstår inte riktigt kan du ge exempel eller kolla om jag har gjort rätt?
Denna gif diggar jag för att förklara funktioner:
Angående din kod i första inlägget så behöver du tänka på indenteringen i isLeapyear. Ditt return kommer bara hända på ditt sista elif, annars kommer det bli Pythons osynliga return None.
Sen i den nedersta snutten, behöver du ett elif? Antingen är det skottår eller inte. Det finns inget tredje fall. Ditt första funktionsanrop har svarat på den frågan.