How to accept the input of both int and float types?
我正在制作货币转换器。 如何让python接受整数和浮点数?
这就是我做的方式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | 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() |
我是如何做到这一点的简单例子:
1 2 3 4 5 6 | number = input("Enter a number:") if number == int: print("integer") if number == float: print("float") |
这两个不起作用。
这是你如何检查给定的字符串并接受
1 2 3 4 5 6 7 8 9 10 | number = input("Enter a number:") nb = None for cast in (int, float): try: nb = cast(number) print(cast) break except ValueError: pass |
但在你的情况下,只使用float可能会起作用(因为整数的字符串表示也可以转换为浮点数:
1 2 3 4 5 6 7 | number = input("Enter a number:") nb = None try: nb = float(number) except ValueError: pass |
如果
我真的希望我不会完全误解这个问题但是我走了。
看起来您只是想确保传入的值可以像浮点一样操作,无论输入是
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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() |
(为了整洁,我做了一些改变,我希望你不介意<3)
1 2 3 4 5 6 7 8 9 | 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 |
如果用户可能提供"12"或"12 .23",则使用
如果需要,您可以在int和float之间进行转换:
1 2 3 4 5 6 7 8 | 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 |
您也可以进行
1 2 3 4 5 6 7 8 | 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 |
但你可能不需要做任何这些。
使用内置的isinstance函数
1 2 | if isinstance(num, (int, float)): #do stuff |
此外,您应该避免为变量名使用保留关键字。关键字
最后,还有一个我注意到的错误:
1 | if From == 'aud' or 'brl' |
应该
1 | if From == 'aud' or From == 'brl' |
最后,要清理if语句,理论上可以使用该列表(如果将来有更多货币,这可能会更好。
1 2 3 | currencies = ['aud', 'brl'] #other currencies possible if From in currencies and to in currencies: #do conversion |