使用算术运算将字符串转换为python中的整数

时间:2018-07-31 18:03:16

标签: python

我有一个问题,如何将带有+或*等算术运算的字符串从字符串转换为整数。

这是我的输入,错误输出:

    a = int('4*5')
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    ValueError: invalid literal for int() with base 10: '4*5'

我期望此操作会将数字20保存为变量a中的整数。

感谢您的帮助

4 个答案:

答案 0 :(得分:2)

它将整个字符串作为一个整数进行评估,而不应用字符串中存在的数学运算,因此显然失败了,因为*不是有效数字。

有一些方法可以获取像这样的代码并对其进行评估,这些方法也可能很危险,例如eval。但是,有一个名为pandas的库,它具有更安全的eval函数:

From the pandas documentation:

  

支持以下算术运算:+,-,*,/,**,%,//(仅适用于python引擎)以及以下布尔运算: (或),&(和)和〜(不是)

>>> import pandas as pd
>>> pd.eval('4*5')
20 

这比使用普通eval更为安全,后者可以在您的计算机上运行潜在的恶意代码。

答案 1 :(得分:0)

如果必须将表达式作为字符串,请使用Python的eval函数。

a = eval('4*5')
a
> 20

否则,只需删除引号即可使其成为表达式而不是字符串:

a = 4*5
a
> 20

答案 2 :(得分:0)

危险的方法是使用eval函数。 eval功能强大,通常会由于输入中的小错误而导致意外或意外的行为。

要正确执行此操作,您需要处理字符串。提取每个数字字符串和运算。将字符串转换为int,然后测试操作并应用所需的代码。例如:

expr = '4*5'
num1 = int(expr[0])
num2 = int(expr[2])
op = expr[1]

if op == '*':
    result = num1 * num2

通常,Python语言语法(关键字,数学符号,标点符号等)不容易在程序本身和所使用的数据之间传递。

答案 3 :(得分:-1)

您正在寻找eval

>>> a = eval('4 * 5')
>>> a
20
>>> type(a)
<type 'int'>

注意事项:请谨慎使用eval()将评估像这样的数学表达式,但还将执行它给出的任何有效python代码。例如,

>>> eval( 'type(a)' )
<type 'int'>