鱼C论坛

 找回密码
 立即注册
查看: 107|回复: 10

[已解决]python小程序编写

[复制链接]
发表于 7 天前 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
输入一个字符串,形式为P OP Q(P,Q都是数字,OP是运算符号加减乘除)
根据OP,计算P OP Q的运算结果,结果保留两位小数,
P与OP,OP与Q之间可以存在多个空格,
例: 输入:3+5  输出:8.00    输入:2/5   输出:0.40
这个程序该咋编写啊?
最佳答案
7 天前
球最佳~
def xxx(s):
    return f"{eval(s):.2f}"

s = input("->")

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

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 7 天前 | 显示全部楼层
嘿,鱼油!这个小程序看起来很有趣,不过不用担心,看我把它变得简单易懂!我们来一步步拆解一下这个任务:

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[op_index]
    Q = float(clean_input[op_index + 1:])

    # 根据运算符计算结果
    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. **保留两位小数并输出**:通过格式化字符串输出保留两位小数的结果。

就这么简单,是不是没你想象的那么复杂?快去试试这个小程序,看看效果吧! 如果有啥问题再来找我,我会一直在这里为你解答!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 7 天前 | 显示全部楼层
def calc(p):
    return f"{eval(p):.2f}"


print(calc("4*2"))
print(calc("2/5"))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

请回答一下,python 中  eval  和 exec这两个函数的区别
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 7 天前 | 显示全部楼层
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`的区别!如果还有什么问题,尽管提问,我会一直在这里为你解答!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

当在输入0*99-8时,程序回报错。
请完善程序@FishC
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 7 天前 | 显示全部楼层
三体人的智子 发表于 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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 7 天前 | 显示全部楼层
本帖最后由 某一个“天” 于 2024-7-10 15:49 编辑

eval + .2f
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 7 天前 | 显示全部楼层    本楼为最佳答案   
球最佳~
def xxx(s):
    return f"{eval(s):.2f}"

s = input("->")

try:
    print(xxx(s))
except Exception as e:
    print(f"出错啦!错误信息: {e}")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 7 天前 | 显示全部楼层

好啊!
还有个更简便的,我差点没想到,用eval
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 7 天前 | 显示全部楼层
s = input()
print("{:.2f}".format(eval(s)))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-7-17 04:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表