" Nonetype"分配给变量时出错

时间:2018-02-09 22:33:38

标签: python variables

刚开始我的编程1课程,我们被分配创建一个测验,并在最后计算最终得分。结果我在每个问题之后创建了这个简单的陈述。

if answer_1 == correct_1:
    a1 = 1 and print("You are correct!")
else:
    a1 = 0 and print("You are incorrect.")

然而,最后它告诉我我不能添加整数和NoneType。错误的答案(零)被正确应用,当答案是正确的,它被存储为NoneType(我知道没有任何意义)。我知道我做错了一些语法,但还不知道如何修复它。

3 个答案:

答案 0 :(得分:1)

你在这里遇到了几件事:

  1. 您的优先级错误,因为首先评估and,然后=

  2. print返回None1 and None = None0 and None = 0

  3. 这是一个解决方案:

    if answer_1 == correct_1:
        a1 = 1 
        print("You are correct!")
    else:
        a1 = 0
        print("You are incorrect.")
    

    修改

    只是想指出为什么它代表1 and None = None0 and None = 0

    这是因为Python懒惰地评估布尔条件。

    以下是docs对此的评论:

      

    表达式x和y首先计算x;如果x为假,则其值为   回;否则,评估y并得到结果值   返回。

         

    表达式x或y首先计算x;如果x为真,则其值为   回;否则,评估y并得到结果值   返回。

    仅限科学

    对布尔条件和=优先级进行延迟评估,您可以模仿条件(三元)运算符,您可以在其他语言中找到它。

      

    三元运算符的定义: condition ? expr1 : expr2

         

    说明:如果condition为真,则运算符返回值   expr1;否则,它返回expr2的值。

    在Python中,您可以使用以下代码模仿:condition and expr1 or expr2

    与三元运算符的定义相同。如果contition评估为True,则会返回expr1。否则,将返回expr2

    为什么我只说科学?因为虽然这看起来很棒,但它并不经常使用,可能会影响代码的可读性。

答案 1 :(得分:0)

Python的and是一个逻辑运算符。它需要两个值(任一方)并返回TrueFalse

答案 2 :(得分:-1)

由于它的作业,我会给你一个强烈的暗示。 and并不像你在这里思考的那样工作。您可以在if语句中包含多行。