有人可以用简单的方式为我解释这段代码。
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 :(得分: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