提问人:Crashofs 提问时间:8/2/2023 最后编辑:Crashofs 更新时间:8/2/2023 访问量:90
为什么我编写的其余代码不起作用?
Why does the rest of the code I wrote not work?
问:
我想把这个原始代码改成我的想法,
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')
我正在尝试更改第一个代码(原始代码) 对于我想将其编码为我自己的第二个代码。 但它只显示第一个运算符,即: - 我做错了哪里?
答:
-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')
评论
if op in operator:
elif op in operator:
x
y
x
*
if op in ('x', '*'):