Python 嵌套用于扩展现有列表的循环

Python 嵌套用于扩展现有列表的循环,python,python-3.x,Python,Python 3.x,给我解释一下这个代码。这是一个以字母形式将整数输入输出的程序。如果我输入35,那么输出将是35。我了解其中的大部分内容,但想知道如何从tens中获取值 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()) numb

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

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])

您在最后一行中看到的两个主要概念是和。看一看

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

TENS

for tens in "twenty thirty forty fifty sixty seventy eighty ninety".split():
    print(tens)
numbers = ("zero one two three four five six seven eight nine".split())
for ones in numbers[0:10]:
    print(ones)
产出:二三四五六七八九

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

(tens for tens in "twenty thirty forty fifty sixty seventy eighty ninety".split())
    (ones for ones in numbers[0:10])
(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(list(tens for tens in "twenty thirty forty fifty sixty seventy eighty ninety".split()))
一个

for tens in "twenty thirty forty fifty sixty seventy eighty ninety".split():
    print(tens)
numbers = ("zero one two three four five six seven eight nine".split())
for ones in numbers[0:10]:
    print(ones)
输出:零一二三四五六七八九

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

(tens for tens in "twenty thirty forty fifty sixty seventy eighty ninety".split())
    (ones for ones in numbers[0:10])
(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])
循环合并

for tens in "twenty thirty forty fifty sixty seventy eighty ninety".split():
    print(tens)
numbers = ("zero one two three four five six seven eight nine".split())
for ones in numbers[0:10]:
    print(ones)
我们可以合并它们:

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
[...]
由于我们不太喜欢
twentzero
,我们将添加一个子句:

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 for tens in "twenty thirty forty fifty sixty seventy eighty ninety".split())
    (ones for ones in numbers[0:10])
(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])
它返回一个列表(*),该列表将扩展到您的
数字列表。

最后,您输入的与列表中单词索引相对应的数字运行正常,没有问题。但是我想知道代码中的“十”是如何从“二十三四十五十六十七十八十九十”中取值的。假设我输入34,那么tens如何从“230405060708090”中得到“30D”@khelwood刚刚对代码进行了c&p处理,它按照预期运行,没有任何更改。你认为这有什么不对?“你说得对。我看错了,非常感谢