Python:如何解决字符串问题;2+;2“;
所以我的问题是:给定一个像“5+5”这样的随机字符串,如何在Python中返回结果? 我不能只做int(“5+5”)。 例如: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
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显然正在学习“编程”。