我有一个问题,如何将带有+或*等算术运算的字符串从字符串转换为整数。
这是我的输入,错误输出:
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中的整数。
感谢您的帮助
答案 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'>