请输入两个数字和一个字母。如果字母是" a",如果" s",减去,如果" m",相乘,如果" d& #34;,分开。
这就是我所拥有的:
num1 = int(input("please enter the first number"))
num2 = int(input("please enter the second number"))
lettler = input("please enter the operation")
a = int(num1 + num2)
s = int(num1 - num2)
m = int(num1 * num2)
d = int(num1 / num2)
if lettler + str(a):
print(num1 + num2)
else:
if lettler + str(s):
print(num1 - num2)
else:
if lettler + str(m):
print(num1 * num2)
else:
if lettler + str(d):
print(float(num1) / num2)
但是我的教授告诉我这是错的。我该怎么做才能解决它?
答案 0 :(得分:6)
你真正的问题在于你的思维方式不正常。您已经阅读了问题,然后在真正了解它的要求之前开始编写解决方案。当你看到一大堆文字时,这实际上是非常常见的,并且需要练习和技巧才能从那里进行正常工作的程序。
让我们一步一步:
请输入两个数字和一个字母。如果字母是" a",如果" s",减去,如果" m",相乘,如果" d& #34;,分开。
这是作业。不要将其保留为这种形式,而是将其转换为一种更容易一点一点思考的形式:
您会注意到我没有更改此处的任何文字,我只是改变了格式。如果你读了这两个,你会发现它们之间没有区别。
现在我们可以考虑将 转换为代码,因为它的代码就像代码一样。您可能已经听过“伪代码”这个术语,这意味着"代码类似的东西"。我们甚至可以在这里做到这一点。
# Take in two numbers and a letter
num_one, num_two, letter = get_two_numbers_and_letter()
if letter is a: # if the letter is 'a'
print(num_one+num_two) # the numbers will be added
if letter is s: # if the letter is 's'
print(num_one-num_two) # the numbers will be subtracted
if letter is m: # if 'm'
print(num_one*num_two) # multiplied
if letter is d: # and if "d", divided
print(num_one/num_two)
你会注意到这看起来像Python一样糟糕。我们可以清理一下:
# take in two numbers
num_one = int(input('First number: '))
num_two = int(input('Second number: '))
# and a letter
letter = input('(a)dd, (s)ubtract, (m)ultiply, or (d)ivide? ')
# if the letter is 'a', the numbers will be added
if letter == 'a':
print(num_one + num_two)
# if the letter is 's', subtracted
if letter == 's':
print(num_one - num_two)
# if 'm', multiplied
if letter == 'm':
print(num_one * num_two)
# and if 'd', divided
if letter == 'd':
print(num_one / num_two)
当然现在这些评论有点多余 - 他们所描述的完全正是代码所做的。我们还使用if
代替elif
,这有点含糊不清且效率较低(不是那时真正重要,但它仍然是正确的)。因此,让我们稍微清理一下代码:
num_one = int(input('First number: '))
num_two = int(input('Second number: '))
letter = input('(a)dd, (s)ubtract, (m)ultiply, or (d)ivide? ')
if letter == 'a':
print(num_one+num_two)
elif letter == 's':
print(num_one-num_two)
elif letter == 'm':
print(num_one*num_two)
elif letter == 'd':
print(num_one/num_two)
else:
print("I'm sorry, I don't recognize letter", repr(letter))
如果您的教授没有教过您关于REPL的知识,那么他们会对您造成伤害。 REPL非常好,尤其适合初学者。您可以立即进行实验并获得反馈。我们来考虑原始代码的一部分:
num1 = int(input("please enter the first number"))
num2 = int(input("please enter the second number"))
lettler = input("please enter the operation")
a = num1+num2
if lettler + str(a):
print(num1 + num2)
您可以将其复制并粘贴到REPL中,或者甚至更好,跳过输入部分,然后分配您想要的值:
>>> num1 = 3
>>> num2 = 5
>>> lettler = 'a'
>>> a = num1 + num2
>>> if lettler + str(a):
... print(num1 + num2)
...
8
大!我们得到了我们的期望!但是......实际上并不是你如何验证实验。你必须设计一些失败的东西。那么如果我们尝试lettler = 's'
怎么办?
>>> if lettler + str(a):
... print(num1+num2)
...
8
咦。好吧,那个不对。我们应该什么也没得到。幸运的是,这很简单,它只是一个if
语句和对print
函数的调用。我们知道问题不是print
,我们的代码永远不应该达到这一点。因此,让我们检查if
声明中的内容:
>>> lettler + str(a)
's8'
喔。这是一个字符串。嗯。它不是一个空字符串,而且它是真的。也许你在课堂上记得这个,但也许你不是。所以,让我们去谷歌并输入' python为什么我的非空字符串是真的?'
当我这样做时,我得到的第一个结果是https://stackoverflow.com/a/9573259/344286这对解释它有一个很好的作用,更好的是,它甚至将我们链接到告诉我们的official documentation:
默认情况下,对象被视为true ...
以下是大多数被认为是错误的内置对象:
... 空序列和集合:
''
...
啊!因为我们的字符串不为空('s8'
),它将评估为True
!哦,那好吧。那么我们实际想做什么呢?我们可能不想一起添加字符串。我们可以比较一下吗?如果我们尝试==
怎么办?
>>> lettler = 'a'
>>> lettler == str(a)
False
嗯。嗯,这不是我们的预期,是吗?我想让我们看看这些值是什么:
>>> lettler
'a'
>>> a
8
喔。嗯,是的,那些不平等!而a
不是'a'
字母。哦,那是对的!我们说a = num1 + num2
,所以当然不是一封信。也许将来我们不应该使用字母作为变量名。如果我们退后一步思考我们想要的东西(if the letter is "a" the numbers should be added
)那么我们就有了答案。我们希望将lettler
与"a"
进行比较:
>>> if lettler == 'a':
... print(num1 + num2)
...
8
>>> lettler = 's'
>>> if lettler == 'a':
... print(num1 + num2)
...
>>>
阿。完美!
答案 1 :(得分:1)
if语句的工作原理是测试if
关键字后面的表达式是否为true。你正在做的是添加两个字符串。在python中,带字符的字符串将始终为true,因此,第一个if始终执行。我所做的是修改你的条件以符合你的要求:
num1 = int(input("please enter the first number: "))
num2 = int(input("please enter the second number: "))
lettler = input("please enter the operation: ")
if lettler == 'a':
print(int(num1 + num2))
elif lettler == 's':
print(int(num1 - num2))
elif lettler == 'm':
print(int(num1 * num2))
elif lettler == 'd':
try:
print(float(num1 / num2))
except ZeroDivisionError:
print('You tried to divide by zero')
看看我如何测试lettler
(您的操作输入)是否等于相应的字母?那正是你想要的。我还添加了一个try / except,确保如果除以零,程序不会崩溃。
答案 2 :(得分:0)
num1 = int(input("please enter the first number"))
num2 = int(input("please enter the second number"))
lettler = input("please enter the operation")
a = int(num1 + num2)
s = int(num1 - num2)
m = int(num1 * num2)
d = int(num1 / num2)
if lettler == "a":
print(num1 + num2)
elif lettler == "s":
print(num1 - num2)
elif lettler == "m":
print(num1 * num2)
elif lettler == "d":
print(float(num1) / num2)