python中int input_关于python:如何接受int和float类型的输入?

这篇博客讨论了如何在Python中创建一个货币转换器,重点在于处理用户输入的整数和浮点数。博主分享了代码示例,包括金额转换函数`aud_brl()`,以及获取用户输入的`question()`函数。博客指出原始代码中的一些错误,如不正确的类型检查和条件语句,并提供了改进的解决方案,建议直接将输入转换为浮点数进行计算,同时确保输入的货币类型有效。此外,还提到了Python的编程哲学,如EAFP原则(易于原谅错误)和LBYL(LOOK-BEFORE-YOU-LEAP)原则。
部署运行你感兴趣的模型镜像

我正在制作货币转换器。 如何让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

26def 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

6number = input("Enter a number:")

if number == int:

print("integer")

if number == float:

print("float")

这两个不起作用。

我将标题和标题更改为小写。 请不要对我们大喊大叫:)

if type(number) is int但是这总是假的,因为number总是一个字符串。

@ juanpa.arrivillaga不,不是。 他正在使用input来读取用户,type(numer)是str。

您知道,if From == 'aud' or 'brl' and to == 'aud' or 'brl'行总是会计算为True,因为'brl'在两种情况下都是真实的。 如果你想看From是'aud'还是'brl',你需要这样的东西:if From == 'aud' or From == 'brl' ...

这是你如何检查给定的字符串并接受int或float(并且还转换为它; nb将是int或float):

1

2

3

4

5

6

7

8

9

10number = input("Enter a number:")

nb = None

for cast in (int, float):

try:

nb = cast(number)

print(cast)

break

except ValueError:

pass

但在你的情况下,只使用float可能会起作用(因为整数的字符串表示也可以转换为浮点数:float('3') -> 3.0):

1

2

3

4

5

6

7number = input("Enter a number:")

nb = None

try:

nb = float(number)

except ValueError:

pass

如果nb None,则会收到无法转换为float的内容。

为什么另一个人说:"当然,真正的Pythonic解决方案是鸭子打字并且如果非int / float被传递则会捕获错误!"?你能解释一下吗?我是编程新手。

这与鸭子打字无关。我只是尝试以永不崩溃的方式将字符串转换为浮点数。其中一个Python哲学是EAFP而不是LBYL。因此python编码器通常会try而不是先检查事物。 (例如,如果你想将str转换为int,你可以先检查字符串是否只包含数字;这不是pythonic的事情)。

我真的希望我不会完全误解这个问题但是我走了。

看起来您只是想确保传入的值可以像浮点一样操作,无论输入是3还是4.79,例如,是否正确?如果是这种情况,那么只需将输入转换为浮点数,然后再对其进行操作。这是你修改过的代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18def 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)

amount==int没有意义。 input给了我们一个字符串。 int(和float)是一个函数。字符串永远不等于函数。

1

2

3

4

5

6

7

8

9In [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')返回float对象。 int('12.23')会产生错误,因为它不是有效的整数字符串格式。

如果用户可能提供"12"或"12 .23",则使用float(x)将其转换为数字会更安全。结果将是一个浮点数。对于许多计算,您无需担心它是浮点数还是整数。数学是一样的。

如果需要,您可以在int和float之间进行转换:

1

2

3

4

5

6

7

8In [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

您也可以进行instance测试

1

2

3

4

5

6

7

8In [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

2if isinstance(num, (int, float)):

#do stuff

此外,您应该避免为变量名使用保留关键字。关键字from是Python中的保留关键字

最后,还有一个我注意到的错误:

1if From == 'aud' or 'brl'

应该

1if From == 'aud' or From == 'brl'

最后,要清理if语句,理论上可以使用该列表(如果将来有更多货币,这可能会更好。

1

2

3currencies = ['aud', 'brl'] #other currencies possible

if From in currencies and to in currencies:

#do conversion

isinstance(num, (int, float))可以直接完成......看起来OP输入以字符串开头。

@hiroprotagonist当然,真正的Pythonic解决方案是鸭子打字并且如果传递非int / float则会捕获错误!

我同意并试图按照以下方式提出答案......

如果在if语句中没有指定货币,我将如何转换它?

@KGarcia你必须重新调整你的代码,这超出了这个评论的范围,但是如果你计划转换多种货币,那么你设置你的功能的方式效率很低

您可能感兴趣的与本文相关的镜像

Python3.11

Python3.11

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

<think>好的,用户想知道在Python中将字符串转换为整数时如何处理ValueError异常。首先,我需要回忆一下Pythonint()函数的使用方法。当使用int()转换字符串时,如果字符串包含非数字字符、小数点者空值,就会抛出ValueError。比如用户提到的例子中,字符串'D5CF'明显包含字母,无法转换为十进制整数,所以会报错。 接下来,我需要考虑常见的异常处理方法。在Python中,通常使用try-except块来捕获处理异常。用户可能需要在转换时捕获ValueError,然后给出友好的提示者进行其他处理。比如,可以提示用户输入有效的数字字符串,者记录错误日志。 然后,我需要整理出具体的步骤。首先,使用try块包裹int()转换的代码。然后,在except块中处理ValueError,可能还包括其他相关异常,比如TypeError,但用户的问题主要集中在ValueError上。此外,可能需要考虑不同的进制转换,比如十六进制,但用户的问题里没有提到,可能需要简要说明。 示例代码方面,应该包括正确的转换错误处理的例子。比如,正常转换"1234",处理成功;转换"12A3"则会触发异常,这时候需要捕获并提示。另外,用户可能还会传入带有空格的字符串,比如" 456 ",这时候int()会自动处理空格,但如果是其他非数字字符则不行。 还需要提到一些注意事项,比如字符串是否包含正负号、前导空格等,这些int()可以处理,但其他字符不行。此外,可能需要提到使用strip()方法去除前后空格,但int()本身已经处理了这种情况,所以可能不需要额外处理。 然后,参考提供的引用内容。引用[1][3]都提到了使用int()方法转换字符串时的异常情况,特别是非数字字符的问题。引用[2]讨论了字符串处理的一般技巧,虽然不直接相关,但可以提到字符串预处理,比如检查是否全为数字。 最后,总结处理步骤:使用try-except捕获ValueError,检查字符串是否有效,可能使用预处理方法确保字符串符合要求。同时给出多个示例代码,说明不同情况下的处理方法,比如正确转换、处理异常、处理带有正负号空格的字符串等。</think>在Python中,将字符串转换为整数时若遇到非数字字符、空值进制不匹配等情况,会触发`ValueError`异常。以下是完整的处理方法示例代码: --- ### **处理方法** 1. **基础异常捕获** ```python try: num = int(input_str) except ValueError: # 异常处理逻辑 ``` 2. **预验证字符串合法性** 使用正则表达式预判是否为纯数字: ```python import re if re.match(r"^[-+]?\d+$", input_str): num = int(input_str) else: print("非法字符") ``` 3. **自定义默认值** ```python def safe_int(value, default=0): try: return int(value) except ValueError: return default ``` --- ### **示例代码** #### 案例1:基础异常捕获 ```python s = "D5CF" try: num = int(s) print(f"转换结果:{num}") except ValueError as e: print(f"错误信息:{e}") # 输出:invalid literal for int() with base 10: 'D5CF' ``` #### 案例2:带默认值的转换 ```python def convert_to_int(s, default=-1): try: return int(s.strip()) # 先去除首尾空格 except (ValueError, TypeError): return default print(convert_to_int(" 123 ")) # 123(自动处理空格) print(convert_to_int("A1B2")) # -1 ``` #### 案例3:处理不同进制字符串 ```python hex_str = "1a3f" try: num = int(hex_str, 16) # 明确指定进制 print(num) # 输出:6719 except ValueError: print("非十六进制字符") ``` --- ### **关键注意事项** 1. **自动忽略首尾空格** `int()`会自动处理字符串首尾的空白符,但中间夹杂的非数字字符仍会报错[^3]。 2. **明确进制参数** 若字符串表示非十进制数值(如十六进制`"0x1a"`),需显式声明`base`参数: ```python int("0x1a", 16) # 正确 int("1a", 16) # 正确(无需前缀) ``` 3. **类型检查优先级** 若输入可能是其他类型(如`None`),建议先做类型判断: ```python if isinstance(s, str): # 执行转换 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值