Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:如何解决字符串问题;2+;2“;_Python_String - Fatal编程技术网

Python:如何解决字符串问题;2+;2“;

Python:如何解决字符串问题;2+;2“;,python,string,Python,String,所以我的问题是:给定一个像“5+5”这样的随机字符串,如何在Python中返回结果? 我不能只做int(“5+5”)。 例如: op1 = raw_input("Enter first number(e.g. 2):") op2 = raw_input("Enter second number(e.g. 2)") operation = raw_input("Enter operation(e.g. +):") result = op1 + operation + op2 print resul

所以我的问题是:给定一个像“5+5”这样的随机字符串,如何在Python中返回结果? 我不能只做int(“5+5”)。 例如:

op1 = raw_input("Enter first number(e.g. 2):")
op2 = raw_input("Enter second number(e.g. 2)")
operation = raw_input("Enter operation(e.g. +):")
result = op1 + operation + op2
print result
if operation == "+":
    return int(op1)+int(op2)
elif operation == "*":
    return int(op1)*int(op2)
# etc.

如何打印4istead of2+2?如何打印8而不是2*4

为了评估Python中字符串的内容,可以使用以下函数:

op1 = raw_input("Enter first number(e.g. 2):")
op2 = raw_input("Enter second number(e.g. 2)")
operation = raw_input("Enter operation(e.g. +):")
result = op1 + operation + op2
print eval(result)

我必须指出,在受保护的环境中使用eval是不安全的,因此,如果无法确定所使用的参数是否正确,请不要使用eval。

一个简单的解决方案是使用:

然而,这是有风险的,因为用户可能会以这种方式将病毒插入到您的代码中。更复杂(正确)的答案是编写自己的解析器。例如:

op1 = raw_input("Enter first number(e.g. 2):")
op2 = raw_input("Enter second number(e.g. 2)")
operation = raw_input("Enter operation(e.g. +):")
result = op1 + operation + op2
print result
if operation == "+":
    return int(op1)+int(op2)
elif operation == "*":
    return int(op1)*int(op2)
# etc.

这只是一个微不足道的例子。真正的解析器要复杂得多。例如,你可能想看看PLY:

我不能不警告你就让你走:
eval
邪恶的
,因为它可能导致死亡


很明显,这是家庭作业,我不会提供完整的解决方案。只有一些线索

首先,记住than返回一个字符串。不是数字。 在Python中,
+
*
是重叠的,因此它们也可以使用字符串来执行某些操作,但如果您来自PHP背景,则可能无法达到预期效果

因此,在对原始输入返回的值进行计算之前,必须先将其转换为适当的类型。这里,使用
int(…)


在实际的程序中,您应该准备好处理来自用户的“错误输入”。例如,有人只是键入enter或提供无法转换为正确类型的数据。这称为验证用户输入。最后,我提出了一个建议:永远不要相信用户的输入

因为这显然是家庭作业,所以我只给你一些提示。您需要
if
/
elif
block检查使用的运算符,并将操作数转换为数字类型。阅读有关问题的更一般解决方案:@Wooble如果这是作业,如果它基本上教给学生如何使用
eval()
。@SylvainLeroux:如果作业不禁止
eval()
并要求学生使用他们在课堂上实际学到的东西,那当然是愚蠢的。构建一个简单的计算器并不是一个不寻常的编程任务,它实际上不是家庭作业。我只是想知道是否有可能在不将输入分解并组合成Python友好格式的情况下对其进行求值(并为自己节省一些代码!)。对什么投反对票?我没有投反对票,但eval没有,这可能是原因。我不是投反对票的人。我只是想指出错误。@BartvanNierop Okey dokey,修正了。@KobiK事实上这不是真的,因为
ast.literal\u eval
不能处理运算符。@freakish你是对的,删除了。“可能会在你的代码中插入病毒”,而
eval
可能导致,在这里使用“病毒”这个词似乎有点混乱。尤其是OP显然正在学习“编程”。