刚开始我的编程1课程,我们被分配创建一个测验,并在最后计算最终得分。结果我在每个问题之后创建了这个简单的陈述。
if answer_1 == correct_1:
a1 = 1 and print("You are correct!")
else:
a1 = 0 and print("You are incorrect.")
然而,最后它告诉我我不能添加整数和NoneType。错误的答案(零)被正确应用,当答案是正确的,它被存储为NoneType(我知道没有任何意义)。我知道我做错了一些语法,但还不知道如何修复它。
答案 0 :(得分:1)
你在这里遇到了几件事:
您的优先级错误,因为首先评估and
,然后=
print
返回None
,1 and None = None
,0 and None = 0
。
这是一个解决方案:
if answer_1 == correct_1:
a1 = 1
print("You are correct!")
else:
a1 = 0
print("You are incorrect.")
修改强>
只是想指出为什么它代表1 and None = None
和0 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
是一个逻辑运算符。它需要两个值(任一方)并返回True
或False
。
答案 2 :(得分:-1)
由于它的作业,我会给你一个强烈的暗示。 and
并不像你在这里思考的那样工作。您可以在if
语句中包含多行。