我经历了使用Python创建一个简单计算器的课程,我正在尝试简化它。 问题如下: 我知道可以使用“float()”将字符串(数字)解析为浮点数,但我试图将字符串中的加法/减法/乘法/除法符号解析为浮点数或整数或任何其他符号将执行该操作的格式。以下是我正在尝试做的一个示例:
while True:
user_input = input("""
quit - exit program
add - addition
sub - subtraction
mul - multiplication
div - division
Please choose function:""")
actions = ("+-*/")
user_input_1 = float(input("first number:"))
user_input_2 = float(input("second number:"))
operation = user_input_1 float(action) user_input_2
if user_input == "add":
action = actions[0]
answer = operation
print (answer)
如果user_input为“add” user_input_1是“5” user_input_2为“7” 然后打印(答案)应该导致12
这只是代码的第一部分,我收到了语法错误。问题很可能是无法使用“float()”解析加法符号。还有另一种解析标志的方法吗?
答案 0 :(得分:3)
即使你应该发布完整的追溯,SyntaxError
来自这一行:
operation = user_input_1 float(action) user_input_2
它既不是有效的Python表达式,也不是语句。
不涉及eval
的解决方案:
您可以将operator
模块和“sign”中的字典用于操作符本身,如此基本(易出错)示例中所示:
import operator
operations_dict = {'+': operator.add,
'-': operator.sub} # extend to other operators you see fit
a = float(input('first num'))
b = float(input('second_num'))
sign = input('operator')
print(operations_dict[sign](a, b))
>> first num
1
>> second num
2
>> operator
+
>> 3.0
答案 1 :(得分:1)
在你的情况下,这应该有效:
def operation(action):
return user_input_1 + action + user_input_2
if user_input == "add":
action = actions[0]
answer = operation(action)
print (eval(answer))
但这不是进行操作的最佳方式。您可以像这样简单add
或divide
,也可以为操作构建dictionary:
def operation(action):
if(action == "add"):
return user_input_1 + user_input_2
elif action == "sub":
return user_input_1 - user_input_2
elif action == "div":
return user_input_1 / user_input_2
# and so on....
answer = operation(user_input)
print (answer)
答案 2 :(得分:0)
您可以在eval('1 + 2')形式中使用eval
,这将为您提供所需的结果。
您可以在此处阅读有关eval的更多信息https://docs.python.org/2/library/functions.html#eval
但请记住以下声明
用户可以在程序中公开隐藏值,或者调用危险值 function(dangerous_function(“/ etc / passwd”))。当然在大多数情况下 (桌面程序)用户不能做任何超出他们能做的事情 编写自己的python脚本,但在某些应用程序(Web应用程序, 自助服务电脑),这可能是一种风险。
答案 3 :(得分:0)
I do not recommend using eval() however; setting some rules won't hurt using eval(). This is really basic calculator and its easy to understand.
allowed_characters = "0123456789+-/*= "
print("""
Basic calculator application.
Operators:
+ addition
- subtraction
* multiplication
/ division
Type the desired operation and press ENTER.
(Example 23 and 46 to multiple
Type 23 * 46 then press ENTER.)
""")
while True:
data = input("Please enter your calculation: ")
if data == "q":
print("Exiting...")
break
for s in data:
if s not in allowed_characters:
print("Invalid character!")
quit()
calculate = eval(data)
print(calculate)