2017-04-22 8 views
2

Ich mache einen Währungsrechner. Wie bekomme ich Python, um sowohl Integer als auch Float zu akzeptieren?Wie akzeptiere ich die Eingabe von int und float?

Dies ist, wie ich es tat:

def aud_brl(amount,From,to): 
    ER = 0.42108 
    if amount == int: 
     if From.strip() == 'aud' and to.strip() == 'brl': 
      ab = int(amount)/ER 
     print(ab) 
     elif From.strip() == 'brl' and to.strip() == 'aud': 
      ba = int(amount)*ER 
     print(ba) 
    if amount == float: 
     if From.strip() == 'aud' and to.strip() == 'brl': 
      ab = float(amount)/ER 
     print(ab) 
     elif From.strip() == 'brl' and to.strip() == 'aud': 
      ba = float(amount)*ER 
     print(ba) 

def question(): 
    amount = input("Amount: ") 
    From = input("From: ") 
    to = input("To: ") 

    if From == 'aud' or 'brl' and to == 'aud' or 'brl': 
     aud_brl(amount,From,to) 

question() 

einfaches Beispiel, wie ich es tat:

number = input("Enter a number: ") 

if number == int: 
    print("integer") 
if number == float: 
    print("float") 

Diese beiden funktionieren nicht.

+1

Ich habe Ihren Titel und Ihre Überschriften in Kleinbuchstaben geändert. Bitte unterlasse es uns nicht anzuschreien :) – gyre

+0

'wenn Typ (Nummer) int 'ist Aber das wird immer falsch sein, da' Nummer 'immer eine Zeichenkette sein wird. –

+0

@ juanpa.arrivillaga nein ist es nicht. Er benutzt 'input', um vom Benutzer zu lesen,' type (numer) 'ist' str'. – direprobs

Antwort

2

Ich hoffe wirklich, dass ich die Frage nicht völlig falsch verstehe, aber hier gehe ich.

Es sieht so aus, als ob Sie nur sicherstellen möchten, dass der übergebene Wert wie ein Float bearbeitet werden kann, unabhängig davon, ob der Eingang 3 oder 4.79 zum Beispiel korrekt ist? Wenn das der Fall ist, dann gieße einfach die Eingabe als Float, bevor du damit arbeitest. Hier ist Ihre modifizierten Code:

def aud_brl(amount, From, to): 
    ER = 0.42108 
    if From.strip() == 'aud' and to.strip() == 'brl': 
     result = amount/ER 
    elif From.strip() == 'brl' and to.strip() == 'aud': 
     result = amount*ER 

    print(result) 

def question(): 
    amount = float(input("Amount: ")) 
    From = input("From: ") 
    to = input("To: ") 

    if (From == 'aud' or From == 'brl') and (to == 'aud' or to == 'brl'): 
     aud_brl(amount, From, to) 

question() 

(ich ein paar Änderungen und aus Gründen der Reinlichkeit gemacht, ich hoffe, es Ihnen nichts ausmacht < 3)

0

die isinstance Funktion verwenden, die auch in

if isinstance(num, (int, float)): 
    #do stuff 

gebaut wird, sollten Sie von der Verwendung reservierten Schlüsselwörter für Variablennamen verzichten. Das Schlüsselwort from ist ein reserviertes Schlüsselwort in Python

Schließlich gibt es ein anderer Fehler ist mir aufgefallen:

if From == 'aud' or 'brl' 

sein sollte
if From == 'aud' or From == 'brl' 

schließlich die if-Anweisungen zu bereinigen, könnten Sie theoretisch Verwenden Sie die Liste (wenn Sie in Zukunft mehr Währungen haben, könnte dies besser sein.

currencies = ['aud', 'brl']  #other currencies possible 
if From in currencies and to in currencies: 
    #do conversion 
+0

'isinstance (num, (int, float))' kann direkt ausgeführt werden ... und es sieht so aus, als würde die Eingabe von OPs mit Strings beginnen. –

+0

@hiroprotagonist Die wahre pythonische Lösung hier wäre natürlich Ente tippen und einen Fehler abfangen, wenn ein Nicht-Int/Float übergeben wird! –

+0

ich stimme zu und versuchte, eine Antwort in dieser Richtung zu finden ... –

2

dies ist, wie Sie die angegebene Zeichenfolge überprüfen konnte und nehmen int oder float (und auch darauf werfen, nb wird eine int oder ein float sein):

number = input("Enter a number: ") 

nb = None 
for cast in (int, float): 
    try: 
     nb = cast(number) 
     print(cast) 
     break 
    except ValueError: 
     pass 

aber in Ihrem Fall nur Schwimmer mit könnte den Trick tun (wie auch Stringdarstellungen von ganzen Zahlen können Schwimmer umgewandelt werden: float('3') -> 3.0):

number = input("Enter a number: ") 

nb = None 
try: 
    nb = float(number) 
except ValueError: 
    pass 

wenn nb ist None du hast etwas, das nicht zu einem float umgewandelt werden könnte.

+0

Warum hat die Ein anderer Typ sagte: "Die wahre Pythonic-Lösung hier wäre natürlich das Tippen von Enten und das Erfassen eines Fehlers, wenn ein Nicht-Int/Float übergeben wird!"? Kannst du bitte Erklären? Ich bin neu in der Programmierung. – Katrina

+0

Das hat nichts mit Duck-Tipping zu tun. Ich versuche nur, eine Zeichenfolge in eine Float auf eine Weise zu konvertieren, die nie abstürzen wird. Eine der Python-Philosophien ist [EAFP] (https://docs.python.org/3/glossary.html#term-eafp) im Gegensatz zu [LBYL] (https://docs.python.org/3/glossary) .html # term-lbyl). So werden Python-Programmierer oft etwas ausprobieren, anstatt die Dinge zuerst zu überprüfen. (Wenn Sie beispielsweise ein 'str' in ein' int' umwandeln möchten, könnten Sie zuerst prüfen, ob der String nur aus Ziffern besteht; das ist keine pythonische Sache). –

0

amount==int macht keinen Sinn. input gibt uns eine Zeichenfolge. int (und float) ist eine Funktion. Eine Zeichenfolge entspricht niemals einer Funktion.

In [42]: x=input('test') 
test12.23 
In [43]: x 
Out[43]: '12.23' 
In [44]: int(x) 
.... 
ValueError: invalid literal for int() with base 10: '12.23' 
In [45]: float(x) 
Out[45]: 12.23 

float('12.23') gibt ein float Objekt.int('12.23') erzeugt einen Fehler, weil es kein gültiges Integer-String-Format ist.

Wenn der Benutzer entweder '12' oder '12 .23 'gibt, ist es sicherer, float(x) zu verwenden, um es in eine Zahl zu konvertieren. Das Ergebnis wird ein Float sein. Bei vielen Berechnungen müssen Sie sich keine Gedanken darüber machen, ob es sich um einen Gleitkommawert oder eine Ganzzahl handelt. Die Mathematik ist die gleiche.

können Sie zwischen int konvertieren und schwimmt, wenn nötig:

In [45]: float(x) 
Out[45]: 12.23 
In [46]: float(12) 
Out[46]: 12.0 
In [47]: int(12.23) 
Out[47]: 12 
In [48]: round(12.23) 
Out[48]: 12 

Sie auch

In [51]: isinstance(12,float) 
Out[51]: False 
In [52]: isinstance(12.23,float) 
Out[52]: True 
In [53]: isinstance(12.23,int) 
Out[53]: False 
In [54]: isinstance(12,int) 
Out[54]: True 

instance Tests tun können, aber brauchen Sie vermutlich nicht diejenigen zu tun.

Verwandte Themen