2 svar
108 visningar
julia.ehr 27
Postad: 5 okt 2023 13:25

funktioner python

Hej, 

jag ska skriva ett program som först ska be användaren skriva in ett år, sedan ska programmet skriva ut om det är ett skottår eller inte beroende på villkoren nedan. Jag måste ha villkoren i funktionen, men inläsningen/inputen får inte vara inne i funktionen. Så min fråga är hur jag ska anropa funktionen efter användaren svarat? 

Om jag fattat det rätt så kan man anropa en funktion i slutet, genom att då skriva in funktionens namn, samt argument som då skickas in i () i funktionen i början, och då skriver vad jag skrivit som argument? Det jag inte fattar är hur jag ska anropa funktionen i början? 

#Fråga användaren
ask=input("Type a year: ")

#Funktionen
def skott():
#Villkor i funktionen som ska uppfyllas beroende på vad användaren svarar

if int(ask)%400==0:
print(ask," is a leap year!")
elif int(ask)%100==0:
print(ask," is not a leap year!")
elif int(ask)%4==0:
print(ask, " is a leap year!")
else:
print(ask," is not a leap year!")

Laguna Online 30428
Postad: 5 okt 2023 13:49

En funktion måste definieras innan den används, så du kan inte anropa 'skott' högst upp, men att anropa den i slutet går bra.

Som din kod ser ut nu så ser funktionen 'skott' variabeln 'ask' så den behöver inte skickas som argument, men det är bättre att skicka den som argument. Då får du definera den så här i stället:

def skott(ask):

 

Använd gärna kodverktyget när du skriver in kod här, så att indenteringen blir rätt.

Alltså

if int(ask)%400==0:
    print(ask," is a leap year!")

snarare än

if int(ask)%400==0:
print(ask," is a leap year!")

farfarMats 1187
Postad: 5 okt 2023 22:41

Som Laguna påpekar bör du föra in värdet till funktionen som ett argument och inte använda den globala variabeln. Det är en god idé att kalla den något annat än ask i funktionen detta för att inte under några omständigheter luras att tro att det är samma variabel.

Nu lite överkurs:

Det är bra att avgränsa sina funktioner så att de gör en sak inte flera - då ökar man chansen att kunna återanvända dem. Det är roligt att programmera men inte att göra samma program om och omigen.

Så i detta fall låt funktionen avgöra om det är skottår eller inte men skriv resultatet i main. För att göra det ersätt printsatserna i funktionen med return True respektive return False . Byt ut int(ask) mot bara ask ,då kräver du visserligen att skott anropas med en integer men det är ju inte så dumt om du i morgon också vill veta om året efter är skottår .

Slutligen anropar du i en ifsats:

 if skott(int(ask)):

    print ..... 

 

... och för året efter  skott(int(ask)+1)   

Svara
Close