有人可以帮我解释这段代码吗?

时间:2014-02-25 18:21:45

标签: python generator

有人可以用简单的方式为我解释这段代码。

prompts = ("Enter Strength Attribute, between 1 and 50: ", "Enter Skill Attribute, between 1 and 50: ") # I already now this so no need to explain it 

answers = [int(input(p)) for p in prompts]
if not all(0 < a <=50 for a in answers):
    # other code here

是发电机吗?

它是如何运作的?

提前感谢您的任何答案。

4 个答案:

答案 0 :(得分:5)

你有一个列表理解和一个​​生成器表达式。

列表理解是:

[int(input(p)) for p in prompts]

并从提示列表中生成一个整数列表,询问用户一系列数值。

它也可以表示为:

answers = []
for p in prompts:
    result = int(input(p))
    answers.append(result)

接下来是:

(0 < a <=50 for a in answers)

这是生成器表达式。它测试每个数字是否为0(不包括)和50(包括)之间的值。

all() function会一次循环生成器表达式一个结果,并且当其中一个结果为False时会返回False,或者True耗尽了生成器结果,未找到False值。

您可以将if all(...)测试替换为:

result = True
for a in answers:
    if not 0 < a <= 50:
        result = False
        break

if result:

这将达到同样的效果;循环遍历answers,但如果任何测试False(不是大于0且小于或等于50的数字),则提前停止循环。

答案 1 :(得分:1)

answers = [int(input(p)) for p in prompts]

这是列表理解。它可以写成for循环,如下所示:

answers = []
for p in prompts:
    resp = int(input(p))
    answers.append(resp)

if not all(0 < a <=50 for a in answers):

这是一个生成器,包含在all中(一个内置函数,返回所有元素是否都为真)你可以把它写成一个函数:

def all(answers):
    for a in answer:
        if not 0 < a <= 50:
            return False  # note this short-circuits, stopping the loop
    return True

答案 2 :(得分:1)

这是列表理解。

第一行与:

完全相同
answers=[]
for p in prompts:
   a=int(input(p))
   answers.append(a)

if条件后面第二行的部分与:

完全相同
for a in answers:
        if a <= 0 or a > 50:
                 return False
return True

答案 3 :(得分:1)

for p in prompts

枚举提示

int(input(p))

询问用户输入,使用p作为提示,然后尝试强制输入为int

answers = [...]

使得答案成为以ints转换的所有输入的列表(这是一个理解列表)

(0 < a <=50 for a in answers)

这是一台发电机。它为答案列表中的每个值创建一个包含测试0 < a <=50的iterable

if not all(...)

测试生成器中的所有元素。如果任何一个是假的,请other code