python使用"if"语句

Wil*_*reu -8 python

请输入两个数字和一个字母.如果字母是"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)

但我的教授告诉我这是错的.我该怎么办才能修复它?

Way*_*ner 6

这里你真正的问题是你在想乱序.您已经阅读了问题,然后在您真正理解它所要求之前开始编写解决方案.当你看到一大堆文字时,这实际上是很常见的,而且需要练习和技巧才能从那里到正确工作的程序.

让我们一步一步:

请输入两个数字和一个字母.如果字母是"a",则数字将被添加,如果"s",则减去,如果"m",则相乘,如果"d",则减去.

这是作业.不要把它留在这种形式,让我们把它转换成一个更容易思考的形式:

  • 请输入两个数字和一个字母
  • 如果字母是'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)

啊.完善!