x871kx6167ss7 Skrevet 23. oktober 2007 Del Skrevet 23. oktober 2007 (endret) Hei! def is_number(x): try: x = str(float(x)) return True except ValueError: return False Løste problemet... Kommer kanskje tilbake med flere spørsmål! Klikk for å se/fjerne innholdet nedenfor Driver å leker meg litt med python. Det jeg lurer på akkurat nå er: Hvorfor virker ikke denne delen? def is_number(x): try: x + 1 return True except TypeError: return False Uansett hva jeg sender til den, returnerer den falsk... Har som sagt ikke så mye erfaring med python, men ut fra det jeg har lest om try/except, så forstår jeg ikke hva som er feil. Hele koden: Klikk for å se/fjerne innholdet nedenfor #!/usr/bin/python # masseenhter.py def is_number(x): try: x + 1 return True except TypeError: return False poundratio = 0.45359237 ozratio = 0.028349523 print "Beregning av massenheter v0.1\n" inn = raw_input("Skriv inn en masse(22kg/lb/oz):") inn = inn.replace(',','.') print is_number(inn[:-2]) verdi = inn[:-2] verdi = float(verdi) enhet = inn[-2:] enhet = enhet.lower() if enhet == 'lb': kilo = verdi * poundratio oz = kilo * ozratio print verdi, 'pounds er', kilo, 'kg' print verdi, 'pounds er', oz, 'oz' if enhet == 'kg': lb = verdi / poundratio oz = verdi / ozratio print verdi, 'kilogram er', lb, 'pound' print verdi, 'kilogram er', oz, 'oz' if enhet == 'oz': kilo = verdi * ozratio lb = kilo / poundratio print verdi, 'oz er', kilo, 'kg' print verdi, 'oz er', lb, 'lb' Endret 23. oktober 2007 av Blackslash Lenke til kommentar
zeitgeist Skrevet 23. oktober 2007 Del Skrevet 23. oktober 2007 hei, ser du har løst problemet ditt, men får allikevel lyst til å svare. Det eneste som ikke kommer helt klart fram er om funksjonen skal returnere True på tall som er strenger, f.eks is_number("123") Hvis den ikke skal det, kan du vurdere to andre utveier: def is_number(x): return hasattr(x, '__abs__') def is_number2(x): return isinstance(x, int) or isinstance(x, float) tests = [1, '1', 1.0, '1.0', 'a', 123456789876543234] for test in tests: print test, type(test), is_number(test) print '\n' for test in tests: print test, type(test), is_number2(test) Output her blir: G:\groks>is_num.py 1 <type 'int'> True 1 <type 'str'> False 1.0 <type 'float'> True 1.0 <type 'str'> False a <type 'str'> False 123456789876543234 <type 'long'> True 1 <type 'int'> True 1 <type 'str'> False 1.0 <type 'float'> True 1.0 <type 'str'> False a <type 'str'> False 123456789876543234 <type 'long'> False Som du ser blir den siste forskjellig. Det er fordi det ikke ligger noen test på datatypen long i is_number2(). Det kan løses med å legge til "or isinstance(x, long)". I is_number() sjekker vi om argumentet har attributter som kjennetegner tall i python, f.eks __abs__(). I is_number2() sjekker vi om argumentet er en instans av int og float. Siste metode fører noen ganger galt avsted, som her. I Python er det ofte ikke interessant hvilken datatype et objekt har, men hvilke metoder det byr på. Hvis det viktige f.eks er om objektet har metoden count(), er det enklest, og penest, og sjekke det, i stedet for å undersøke om objektet er det ene, andre, tredje osv. F.eks har både en streng og en liste metoden count(): In [1]: "1234".count("4") Out[1]: 1 In [2]: [1, 2, 3 ,"4", 4].count("4") Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå