今天在做mooc课程《Python语言程序设计》的练习题时,遇到一道题,硬生生纠结了半个小时,结果发现答案居然只是短短的两行,这功力不够果然还是不行啊,用C的思维去写Python怕是要纠结死🤔
先看看题
题目
数值运算
描述
获得用户输入的一个字符串,格式如下:
M OP N
其中,M和N是任何数字,OP代表一种操作,表示为如下四种:+, -, *, /(加减乘除)
根据OP,输出M OP N
的运算结果,统一保留小数点后两位
注意:M和OP、OP和N之间可以存在多个空格,不考虑输入错误情况
示例输入
10 + 100
1 / 20
示例输出
110.00
0.05
解答
我最开始的想法是读入字符串,然后根据空格分为M、OP和N,之后再转换为int型进行计算
然而,我却完全忘记了Python有着eval()
的存在….
eval()
|eval()
函数用来执行一个字符串表达式,并返回表达式的值
eval(expression[, globals[, locals]])
参数
expression – 表达式
globals – 变量作用域,全局命名空间,若被提供,必须是一个字典对象
locals – 变量作用域,局部命名空间,若被提供,可以是任何映射对象
可见,使用eval()
后,就不需要我们自己对用户输入的算式进行处理,只需要直接调用,函数会自动帮我们计算结果
之后根据题意,我们还要将运算结果保留两位小数,这时format()
就派上了用场
format()
这是一种格式化字符串的函数,基本语法是使用{}
和:
|format()
函数可以接受不限个参数,位置可以不按顺序
>>> "{} {}".format("hello", "world") # 不设置指定位置,按默认顺序
'hello world'
>>> "{0} {1}".format("hello", "world") # 设置指定位置
'hello world'
>>> "{1} {0} {1}".format("hello", "world") # 设置指定位置
'world hello world'
数字格式化
我们阔以使用str.format()
格式化数字
|{:.2f}
保留小数点后两位
|{:+.2f}
带符号保留小数点后两位
|{:0>2d}
数字补0(填充左边,宽度为2)
|{:,}
以逗号分隔的数字形式
|{:.2%}
百分比格式
|{:.2e}
指数记法
|{:>10d}
右对齐(默认,宽度为10)
|{:^10d}
中间对齐(宽度为10)
|{:b}
二进制
Answer
于是,利用eval()
与format()
,我们阔以直接写出答案:
s = input()
print("{:.2f}".format(eval(s)))
怎么样,是不是很简单