为什么我编写的其余代码不起作用?

Why does the rest of the code I wrote not work?

提问人:Crashofs 提问时间:8/2/2023 最后编辑:Crashofs 更新时间:8/2/2023 访问量:90

问:

我想把这个原始代码改成我的想法,

num1 = float(input('enter your first number :'))
op = input('choose your operator: ')
num2 = float(input('enter your second number :'))


if op == '-':
    print(num1 - num2)
elif op == '+':
    print(num1 + num2)
elif op == '*':
    print(num1 * num2)
elif op == '/':
    print(num1 / num2)
else:
    print('invalid operator')

并改成这个。 但它只显示第一个操作,即: -

**num1 = float(input('enter your first number :'))
op = input('choose your operator: ')
num2 = float(input('enter your second number :'))
operator = ('+', '-', '/', '*')

if op in operator:
    print(num1 - num2)
elif op in operator:
    print(num1 + num2)
elif op in operator:
    print(num1 * num2)
elif op in operator:
    print(num1 / num2)
else:
    print('invalid operator')

我正在尝试更改第一个代码(原始代码) 对于我想将其编码为我自己的第二个代码。 但它只显示第一个运算符,即: - 我做错了哪里?

python windows 调试 pycharm

评论

3赞 Sayse 8/2/2023
为什么你会期望命中多个不同的相同 elif,而不是 if?
2赞 matszwecja 8/2/2023
@Crashofs在这种情况下,解释为什么你期望是 False,但后面两行完全相同的条件应该是 True,我们可以从那里开始。if op in operator:elif op in operator:
2赞 matszwecja 8/2/2023
回答我问的问题。知道为什么代码不起作用与知道它为什么起作用一样重要。你明白为什么第二个代码不起作用吗?
1赞 slothrop 8/2/2023
@Crashofs明白了。因此,如果您希望多个项目产生相同的行为,即您的代码会询问“是 ?我不在乎哪个具体项目,只要告诉我是或否,它是其中一项吗?然而,这在这里并不那么有用,因为四个运算符中的每一个都需要有不同的行为。xy
1赞 slothrop 8/2/2023
但想象一下,您希望用户能够输入 or 作为乘法符号。在这种情况下,您可能希望这样做x*if op in ('x', '*'):

答:

-2赞 Xiaomin Wu 8/2/2023 #1

在代码中,运算符中的操作始终为 true。所以第一个 if 条件总是被执行。

我估计你需要一个字典来存储运算的功能。

num1 = float(input('enter your first number :'))
op = input('choose your operator: ')
num2 = float(input('enter your second number :'))

operator = {
    "-": lambda x, y: x - y,
    "+": lambda x, y: x + y,
    "/": lambda x, y: x / y,
    "*": lambda x, y: x * y
    }

if op in operator:
    print(operator[op](num1, num2))
else:
    print('invalid operator')

评论

2赞 Yevhen Kuzmovych 8/2/2023
虽然这个代码片段可能会解决这个问题,但包括一个解释确实有助于提高你的帖子的质量。请记住,您正在为将来的读者回答问题,而这些人可能不知道您的代码建议的原因。
0赞 Xiaomin Wu 8/2/2023
@slothrop我修改答案。第一个 if 在代码中始终为 true。所以你得到 num1-num2 取决于 if 的顺序。
0赞 Xiaomin Wu 8/2/2023
@YevhenKuzmovych我修改答案,谢谢。
0赞 Crashofs 8/2/2023
@XiaominWu感谢您对我的帮助。是的,我测试了,效果很好。你知道,由于我刚开始学习Python,我觉得我不知道很多主题,我想知道有没有像我一样更简单的方法?我将不胜感激
0赞 Xiaomin Wu 8/2/2023
@Crashofs 多练习,保持好奇心
-1赞 Muhammad Usman Ali Bukhari 8/2/2023 #2

我相信这一定是你想要实现的目标:

num1 = float(input('enter your first number :'))
op = str(input('choose your operator: '))
num2 = float(input('enter your second number :'))

if op in ('+', '-', '/', '*'):
    if op == '+':
        print(num1 + num2)
    elif op == '-':
        print(num1 - num2)
    elif op == '*':
        print(num1 * num2)
    elif op == '/':
        print(num1 / num2)
else:
    raise ValueError("Invalid operator!")

评论

1赞 Crashofs 8/2/2023
感谢您的回复。那么无论如何都应该使用 == 符号,对吧?除非我使用的是我还没有学会的更高级的功能
0赞 Flow 8/2/2023 #3

以下是 lambda 表达式所建议的内容,但在我看来,这更具可读性。如果你使用内置的模块运算符,你可以使用字典很好地将输入转换为运算符:

import operator as ops 

num1 = float(input('enter your first number :'))
op = input('choose your operator: ')
num2 = float(input('enter your second number :'))

# setting up a dictionary to translate the input to an operator, 
operator = {'+': ops.add, '-': ops.sub, '*': ops.mul, '/': ops.truediv}

if op in operator.keys(): # operator.keys() is equivalent to ('+', '-', '*', '/')
    print(operator[op](num1, num2))
else:
    print('invalid operator')