嵌套for循环扩展现有lis

2024-06-02 08:45:04 发布

您现在位置:Python中文网/ 问答频道 /正文

给我解释一下这个代码。这是一个以字母形式输出整数输入的程序。如果我输入35,那么输出将是35。我了解其中的大部分内容,但想知道如何从

twenty thirty forty fifty sixty seventy eighty ninety

代码是:

num = int(input("Enter the number:"))
numbers = ("zero one two three four five six seven eight nine".split())
numbers.extend("ten eleven twelve thirteen fourteen fifteen sixteen".split())
numbers.extend("seventeen eighteen nineteen".split())
numbers.extend(tens if ones == "zero" else (tens + " " + ones) 
    for tens in "twenty thirty forty fifty sixty seventy eighty ninety".split()
    for ones in numbers[0:10])

print(numbers[num])

Tags: 代码onesnumsplitnumbersextendfiftytwenty
1条回答
网友
1楼 · 发布于 2024-06-02 08:45:04

您在最后一行中看到的两个主要概念是list comprehensionnested loops。看一看。你知道吗

为了更好地理解正在发生的事情,我们将把这条线分成更简单的部分:

十位数

for tens in "twenty thirty forty fifty sixty seventy eighty ninety".split():
    print(tens)

OUTPUT: twenty thirty forty fifty sixty seventy eighty ninety

前面的for循环对应于列表中的以下内容:

(tens for tens in "twenty thirty forty fifty sixty seventy eighty ninety".split())

不带print,返回生成器。如果要查看结果:

print(list(tens for tens in "twenty thirty forty fifty sixty seventy eighty ninety".split()))

numbers = ("zero one two three four five six seven eight nine".split())
for ones in numbers[0:10]:
    print(ones)

OUTPUT: zero one two three four five six seven eight nine

前面的for循环对应于列表中的以下内容:

    (ones for ones in numbers[0:10])

为循环合并

我们可以合并它们:

for tens in "twenty thirty forty fifty sixty seventy eighty ninety".split():
    for ones in numbers[0:10]:
        print(tens + " " + ones)
OUTPUT: twenty zero
twenty one
twenty two
twenty three
twenty four
twenty five
twenty six
twenty seven
twenty eight
twenty nine
thirty zero
thirty one
thirty two
[...]

因为我们不太喜欢twenty zero,所以我们要添加一个子句:

for tens in "twenty thirty forty fifty sixty seventy eighty ninety".split():
    for ones in numbers[0:10]:
        if ones == "zero":
            print(tens)
        else:
            print(tens + " " + ones)
OUTPUT:
twenty
twenty one
twenty two
twenty three
twenty four
[...]

这和列表理解是一样的:

(tens if ones == "zero" else (tens + " " + ones) for tens in "twenty thirty forty fifty sixty seventy eighty ninety".split() for ones in numbers[0:10])

它返回一个列表(*generator),该列表将扩展到numbers列表。
最后,您输入的数字对应于列表中单词的索引

相关问题 更多 >