2014-02-25 95 views
1

有人可以用简单的术语来解释这段代码吗?有人可以为我解释这段代码吗?

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 

它是一个发电机?

它是如何工作的?

在此先感谢您的任何答案。

+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
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 
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 
1
for p in prompts 

枚举提示

int(input(p)) 

问用户对于输入,使用p作为提示,然后尝试迫使输入作为int

answers = [...] 

使得答案的所有整数变换后的输入列表(这是一个理解列表)

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

这是一个发生器。它创建含有试验0 < a <=50在答案的每个值可迭代列出

if not all(...) 

试验在发生器的所有元素。如果任何一个是假的,other code

相关问题