Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  11 6317
Hei folkens.
Her har jeg en input for tall. Så hvis man skriver bokstaver i istedenfor tall, så krasjer programmet. Er det noen triks for å unngå det? Noen while loops?
---------------------------------------------------------------------------------

def alderinput():
global alder

alder = int(input ("Alder: "))

alderinput()

Kode

def alderinput():
  while True:
    try:
      return int(input("Alder: "))
    except ValueError:
      print("Du må skrive inn et tall!")
alder = alderinput()
For eksempel kan man gjøre det slik. Det er også litt ryddigere om funksjonen returnerer alderen istedenfor å sette det i en global variabel.
Trigonoceps occipita
vidarlo's Avatar
Donor
Generelt er Try/Catch tingen i slike situasjoner, eventuelt lese inn strengen, også sjekke om den er tall før du caster.

Følgjande døme vil kanskje gi deg det du treng.

Kode

try:
 foo = int(input("foo"))
except:
 print("Not integer")
Alternativt kan du lese det inn, også sjekke om det er tall med isdigit()

Kode

foo = input("Foo")
if foo.isdigit():
 foo = int(foo)
Takk titegn
Sitat av vidarlo Vis innlegg
Generelt er Try/Catch tingen i slike situasjoner, eventuelt lese inn strengen, også sjekke om den er tall før du caster.

Følgjande døme vil kanskje gi deg det du treng.

Kode

try:
 foo = int(input("foo"))
except:
 print("Not integer")
Alternativt kan du lese det inn, også sjekke om det er tall med isdigit()

Kode

foo = input("Foo")
if foo.isdigit():
 foo = int(foo)
Vis hele sitatet...
Det er best å catche en eller flere konkrete exceptions slik som Nine gjorde i motsetning til alle. Catcher en alle får man problemer om en prøver å avslutte med ctrl-c eller ctrl-d.
Trigonoceps occipita
vidarlo's Avatar
Donor
Sitat av ThinkpadX200 Vis innlegg
Det er best å catche en eller flere konkrete exceptions slik som Nine gjorde i motsetning til alle. Catcher en alle får man problemer om en prøver å avslutte med ctrl-c eller ctrl-d.
Vis hele sitatet...
Ja, poenget mitt var å vise metodikken. Ikkje å gi kode som kunne copy-pastast inn
Hei. Limte inn Nine sin kode. Hadde litt problemer med at programmet først spurte om alder. Så kjønn(mann/kvinne). Så tilbake på alder igjen. Deretter fant jeg ut at programmet startet med alderfunksjonen uansett. Så lot jeg det være, uten å kalle funksjonen.

Kode

def alderinput():
  while True:
    try:
      return int(input("Alder: "))
    except ValueError:
      print("Du må skrive inn et tall!")
alder = alderinput()

def stadie_i_livet1():
    global stadie_i_livet
    if alder < 1:
        stadie_i_livet = " er i fosterstadiet"
    elif alder > 1 and alder < 14:
        stadie_i_livet = " er et barn"
    elif alder > 13 and alder < 20:
        stadie_i_livet = " er en tenåring"
    elif alder > 19 and alder < 30:
        stadie_i_livet = " er en voksen"
    elif alder > 29 and alder < 40:
        stadie_i_livet = " er en i 30-årene"
    elif alder > 39 and alder < 50:
        stadie_i_livet = " er en i 40-årene"
    elif alder > 49 and alder < 200:
        stadie_i_livet = " er veldig gammel"




def historie():
    print("Du er en " + kjønn +".")
    print("Du"+stadie_i_livet)




def kjønninput():
   while True:
    global kjønn
    print("Er du mann eller kvinne?")
    print("Skriv hva du er, så trykk enter.")
    kjønn = input("mann/kvinne: ")
    kjønn = kjønn.lower()
    if "mann" in kjønn:
        break

    elif "kvinne" in kjønn:
        break





kjønninput()
stadie_i_livet1()
historie()
Sist endret av Realist1; 3. mai 2020 kl. 22:19. Grunn: La koden i CODE-tags.
Trigonoceps occipita
vidarlo's Avatar
Donor
Om du skal poste Python-kode du bruke [code]-tagger slik at formateringa vert med. Ellers er det klin umulig å gjette kva du forsøker å oppnå.

Forøvrig vil eg anbefale deg å finne eit undervisningsopplegg for Python, t.d. https://diveintopython3.problemsolving.io/

Då vil du stortsett verte introdusert for konsept, for å så bruke dei i oppgaveløysing. Det er meir matnyttig framgangsmåte enn å lage tråder for relativt trivielle ting i Python.
OK titegn
Som ny programmerer er det naturligvis alltid mye som kan forbedres (det er det for så vidt også for erfarne programmerere!), men det viktigste er å være i gang og begynne å prøve seg frem, og det er du jo!
Her er noen innspill til koden din over:

Når du sjekker alderen, så vil jo nedre grense allerede være gitt av forrige sjekk, så du kan droppe halvparten av setningen. Her er en like god, og mer ryddig snutt:

Kode

if alder < 1:
    stadie = "i fosterstadiet"
elif alder < 14:
    stadie = "et barn"
elif alder < 20:
    stadie = "en tenåring"
elif alder < 30:
    stadie = "en voksen"
Neste tips: F-strings! Fra og med Python 3.6, så har man en veldig mye greiere måte å sette variabler inn i strings på. Det gjøres ved å sette en "f" direkte foran strengen, og så inkludere variabelen i krøllparanteser. Da slipper du også å caste tall til streng med str(). Her er et eksempel!

Kode

>>> navn = "Per"
>>> alder = 20
>>> print(f"Jeg heter {navn} og er {alder} år gammel.")
Jeg heter Per og er 20 år gammel.
Tredje tips: Det er ofte ryddigst å unngå globale variabler i funksjoner der du kan. Ta heller inn variabelen som et parameter i funksjonen, og lagre returverdien i en variabel i det globale scopet. Altså, lag heller funksjonen
og kall den slik:

Kode

def stage_of_life(age):
    if age < 1:
        return "a baby"
    elif age < 14:
        return "a child"
    else:
        return "an adult"

age = 20            # hentet fra input tidligere
gender = "male"     # samme^
stage = stage_of_life(age)
Legg merke til at funksjonen ikke printer noe, den bare returnerer et svar. Printe kan du deretter gjøre senere:

Kode

print(f"You are a {age} year-old {gender}, and you're therefore {stage}.")
# You are a 20 year-old male, and you're therefore an adult.
En bedre måte å sjekke om svaret er "mann" eller "kvinne" kan forresten være:

Kode

if kjønn in ["mann", "kvinne"]:
    break
, eller ha sjekken direkte i while-betingelsen, slik:

Kode

while kjønn not in ["mann", "kvinne"]:
    kjønn = input("Mann eller kvinne? ").lower()
Da må du imidlertid definere variabelen først, f.eks. med dette først, før while-løkken:

Kode

kjønn = ""
Sist endret av Realist1; 4. mai 2020 kl. 13:10.
Takk for innspill Realist1
Sitat av davidentotre Vis innlegg
Hei. Limte inn Nine sin kode. Hadde litt problemer med at programmet først spurte om alder. Så kjønn(mann/kvinne). Så tilbake på alder igjen. Deretter fant jeg ut at programmet startet med alderfunksjonen uansett. Så lot jeg det være, uten å kalle funksjonen.
Vis hele sitatet...
Du kaller jo på alderfunksjonen i linje 7. Det blir mer oversiktlig hvis du flytter den linja ned til de andre funksjonskallene i linje 53-55.