python使用" if"声明

时间:2017-10-05 12:47:56

标签: python

请输入两个数字和一个字母。如果字母是" 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)
但是我的教授告诉我这是错的。我该怎么做才能解决它?

3 个答案:

答案 0 :(得分:6)

你真正的问题在于你的思维方式不正常。您已经阅读了问题,然后在真正了解它的要求之前开始编写解决方案。当你看到一大堆文字时,这实际上是非常常见的,并且需要练习和技巧才能从那里进行正常工作的程序。

让我们一步一步:

  

请输入两个数字和一个字母。如果字母是" a",如果" s",减去,如果" m",相乘,如果" d& #34;,分开。

这是作业。不要将其保留为这种形式,而是将其转换为一种更容易一点一点思考的形式:

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

你会注意到这看起来像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)