请输入两个数字和一个字母.如果字母是"a",则数字将被添加,如果"s",则减去,如果"m",则相乘,如果"d",则减去.
这就是我所拥有的:
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)
Run Code Online (Sandbox Code Playgroud)
但我的教授告诉我这是错的.我该怎么办才能修复它?
这里你真正的问题是你在想乱序.您已经阅读了问题,然后在您真正理解它所要求之前开始编写解决方案.当你看到一大堆文字时,这实际上是很常见的,而且需要练习和技巧才能从那里到正确工作的程序.
让我们一步一步:
请输入两个数字和一个字母.如果字母是"a",则数字将被添加,如果"s",则减去,如果"m",则相乘,如果"d",则减去.
这是作业.不要把它留在这种形式,让我们把它转换成一个更容易思考的形式:
您会注意到我没有更改任何文本,我只是改变了格式.如果你读了两个,你会发现它们之间没有区别.
现在我们可以考虑将其转换为代码,因为它像代码一样布局.您可能听说过"伪代码"这个术语,意思是"代码类似的东西".我们甚至可以在这做.
# 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)
Run Code Online (Sandbox Code Playgroud)
你会发现这看起来像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)
Run Code Online (Sandbox Code Playgroud)
当然现在这些评论有点多余 - 他们所描述的完全正是代码所做的.我们也使用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))
Run Code Online (Sandbox Code Playgroud)
如果你的教授没有教你关于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)
Run Code Online (Sandbox Code Playgroud)
您可以将其复制并粘贴到REPL中,甚至更好,跳过输入部分,然后只需指定所需的值:
>>> num1 = 3
>>> num2 = 5
>>> lettler = 'a'
>>> a = num1 + num2
>>> if lettler + str(a):
... print(num1 + num2)
...
8
Run Code Online (Sandbox Code Playgroud)
大!我们得到了我们的期望!但是......实际上并不是你如何验证实验.你必须设计一些应该失败的东西.那么如果我们尝试lettler = 's'呢?
>>> if lettler + str(a):
... print(num1+num2)
...
8
Run Code Online (Sandbox Code Playgroud)
呵呵.嗯,那不对.我们应该什么也没得到.幸运的是,这很简单,它只是一个if声明和对print函数的调用.我们知道这不是print问题,我们的代码永远不应该达到这一点.那么让我们检查一下if声明中的内容:
>>> lettler + str(a)
's8'
Run Code Online (Sandbox Code Playgroud)
哦.那是一个字符串.嗯.它不是一个空字符串,这是真的.也许你在课堂上记得这个,但也许你没有.那么我们去谷歌并输入'python为什么我的非空字符串是真的?'
当我这样做时,我得到的第一个结果是/sf/answers/670128161/这很好地解释了它,更好的是,它甚至将我们链接到告诉我们的官方文档:
默认情况下,对象被认为是真的......
以下是大多数被认为是错误的内置对象:
......空序列和集合:
''......
啊!因为我们的字符串不是空的('s8')它将评估为True!哦,那好吧.那么我们真正想要做什么呢?我们可能不想一起添加字符串.我们可以比较一下吗?如果我们尝试==怎么办?
>>> lettler = 'a'
>>> lettler == str(a)
False
Run Code Online (Sandbox Code Playgroud)
嗯.嗯,这不是我们的预期,是吗?我想让我们看看这些值是什么:
>>> lettler
'a'
>>> a
8
Run Code Online (Sandbox Code Playgroud)
哦.好吧,那些不平等!而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)
...
>>>
Run Code Online (Sandbox Code Playgroud)
啊.完善!
| 归档时间: |
|
| 查看次数: |
101 次 |
| 最近记录: |