三体人的智子 发表于 2024-7-10 15:10:18

python小程序编写

输入一个字符串,形式为P OP Q(P,Q都是数字,OP是运算符号加减乘除)
根据OP,计算P OP Q的运算结果,结果保留两位小数,
P与OP,OP与Q之间可以存在多个空格,
例: 输入:3+5输出:8.00    输入:2/5   输出:0.40
这个程序该咋编写啊?{:10_269:}

FishC 发表于 2024-7-10 15:11:40

嘿,鱼油!这个小程序看起来很有趣,不过不用担心,看我把它变得简单易懂!我们来一步步拆解一下这个任务:

1. 我们需要从用户那里获取一个字符串输入。
2. 然后,我们需要把这个字符串整理干净,去掉多余的空格。
3. 接着,我们把数字和运算符分开,进行相应的计算。
4. 最后,把结果保留两位小数,并打印出来。

好嘞,这些步骤都清晰了,我们就可以开始写代码啦,让我们看看这个过程全貌:

def calculate():
    # 获取用户输入
    user_input = input("请输入一个表达式,形式为 P OP Q:")

    # 去掉多余的空格
    clean_input = ''.join(user_input.split())

    # 找到运算符的位置
    for i, char in enumerate(clean_input):
      if char in '+-*/':
            op_index = i
            break

    # 分割出操作数和运算符
    P = float(clean_input[:op_index])
    OP = clean_input
    Q = float(clean_input)

    # 根据运算符计算结果
    if OP == '+':
      result = P + Q
    elif OP == '-':
      result = P - Q
    elif OP == '*':
      result = P * Q
    elif OP == '/':
      if Q != 0:
            result = P / Q
      else:
            return "除数不能为0"
    else:
      return "无效的运算符"

    # 输出结果,保留两位小数
    print(f"{result:.2f}")

if __name__ == "__main__":
    calculate()

### 解释一下代码
1. **去掉多余空格**:`clean_input = ''.join(user_input.split())`这行代码把输入的字符串中的所有空格都去掉了,这样我们就不必担心空格会影响我们的进一步操作。

2. **找到运算符**:通过遍历字符串,找到第一个出现的运算符的位置。

3. **分割字符串并转换为数字**:把运算符前后的部分分别转化为浮点数(这样结果更精确),中间的字符就是运算符。

4. **进行计算**:根据运算符进行对应的计算。

5. **保留两位小数并输出**:通过格式化字符串输出保留两位小数的结果。

就这么简单,是不是没你想象的那么复杂?快去试试这个小程序,看看效果吧! 如果有啥问题再来找我,我会一直在这里为你解答!{:10_269:}
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

wp231957 发表于 2024-7-10 15:27:17

def calc(p):
    return f"{eval(p):.2f}"


print(calc("4*2"))
print(calc("2/5"))

wp231957 发表于 2024-7-10 15:28:08

FishC 发表于 2024-7-10 15:11
嘿,鱼油!这个小程序看起来很有趣,不过不用担心,看我把它变得简单易懂!我们来一步步拆解一下这个任务: ...

请回答一下,python 中eval和 exec这两个函数的区别

FishC 发表于 2024-7-10 15:28:26

wp231957 发表于 2024-07-10 15:28
请回答一下,python 中eval和 exec这两个函数的区 ...

当然可以,鱼油!这两个函数在Python中都能用来执行字符串形式的代码,不过它们的功能和适用场景有所不同。让我用一个幽默又通俗易懂的方式来解释一下吧!

### eval 函数

`eval()`就像是一个简单的小助手,它会帮你计算表达式的结果。就好比你写下一个数学题目,它会快速地给你答案。

**特点:**
- 只用于计算表达式。
- 返回表达式的结果。

result = eval("3 + 5 * 2")
print(result)# 输出:13

### exec 函数

`exec()`则是个万能的大佬,它不仅能帮你计算,还能执行一连串的Python代码。你想让它干啥,它就能干啥。

**特点:**
- 可以执行一段Python代码。
- 不返回值,只执行代码(但你可以通过变量修改或其他方式获取执行结果)。

code = """
def greet():
    print("Hello, fish!")
greet()
"""
exec(code)# 输出:Hello, fish!

### 具体区别

1. **功能范围不同:**
   - `eval()`只能计算表达式(比如数学公式),不能执行多行代码或者定义函数等。
   - `exec()`可以执行复杂的Python代码,包括多行语句、函数定义等等。

2. **返回值不同:**
   - `eval()`会返回表达式的计算结果。
   - `exec()`执行代码后不返回值,它的作用主要是执行代码中的操作。

3. **安全性不同:**
   - `eval()`相对较为简单,但如果使用不当(比如执行用户输入的内容),可能会有安全风险。
   - `exec()`更强大,但也因此更危险。如果不小心执行了恶意代码,会导致严重的后果。

### 实战场景

假如你有一个计算器应用,想要计算用户输入的数学表达式,可以用`eval()`:

user_input = "3 + 5 * 2"
result = eval(user_input)
print(result)# 输出:13

但如果你需要动态生成并运行一段Python代码,比如动态地定义函数或类,或者执行多行代码,则可以用`exec()`:

user_code = """
a = 10
b = 20
def add(x, y):
    return x + y
result = add(a, b)
"""
exec(user_code)
print(result)# 输出:30

总结起来就是:`eval`是用来算简答题的,而`exec`则是用来完成复杂任务的两位好帮手。但不管用哪个,记得要慎重处理用户输入,防止安全问题哦!

希望这个解释能帮你了解`eval`和`exec`的区别!如果还有什么问题,尽管提问,我会一直在这里为你解答! {:10_249:}
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

三体人的智子 发表于 2024-7-10 15:29:05

FishC 发表于 2024-7-10 15:11
嘿,鱼油!这个小程序看起来很有趣,不过不用担心,看我把它变得简单易懂!我们来一步步拆解一下这个任务: ...

当在输入0*99-8时,程序回报错。
请完善程序@FishC

FishC 发表于 2024-7-10 15:29:12

三体人的智子 发表于 2024-07-10 15:29
当在输入0*99-8时,程序回报错。
请完善程序@FishC

哈哈,看来程序给你捣乱了!别着急,鱼油,我们来看看怎么让它乖乖听话。

通常,看到"程序报错",我们首先要检查输入和代码逻辑。这里可能有几个问题,但是我猜最可能的原因是输入处理不当或者算术操作中有小错误。

假设你是在用Python写这个程序,首先我们需要确保输入是正确的格式,然后再进行计算。先从简单的示例开始。

try:
    expression = input("请输入一个数学表达式(例如 0*99-8): ")
    result = eval(expression)# 使用 eval 函数来计算输入的数学表达式
    print(f"结果是: {result}")
except Exception as e:
    print(f"出错啦,小鱼油!错误信息: {e}")

这个程序会要求用户输入一个数学表达式,比如 “0*99-8”,然后用 `eval` 函数来直接计算这个表达式。如果输入不正确,会捕获异常并提示错误信息。

**注意:**
使用 `eval` 函数虽然方便,但如果用户输入恶意代码,可能会导致安全问题!在实际项目中,要非常慎重地使用它。平时练习可以,但在生产环境一定要进行严格的输入验证。

当然,如果你想更安全地解析和计算数学表达式,可以使用一些专门的库,例如 `sympy` 等,但这里就先不扩展啦~

希望这样能帮你解决问题。如果还有其他疑问或方向错误,请随时喊我哦!@FishC
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

某一个“天” 发表于 2024-7-10 15:47:26

本帖最后由 某一个“天” 于 2024-7-10 15:49 编辑

eval + .2f

某一个“天” 发表于 2024-7-10 15:59:53

球最佳~
def xxx(s):
    return f"{eval(s):.2f}"

s = input("->")

try:
    print(xxx(s))
except Exception as e:
    print(f"出错啦!错误信息: {e}")

三体人的智子 发表于 2024-7-10 16:42:41

某一个“天” 发表于 2024-7-10 15:59
球最佳~

好啊!
还有个更简便的,我差点没想到,用eval

三体人的智子 发表于 2024-7-10 16:43:20

某一个“天” 发表于 2024-7-10 15:59
球最佳~

s = input()
print("{:.2f}".format(eval(s)))
页: [1]
查看完整版本: python小程序编写