python - 嵌套 for 循环扩展现有列表
问题描述
向我解释这段代码。这是一个将整数输入打印为字母输出的程序。如果我输入 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])
解决方案
您在最后一行看到的两个主要概念是列表理解和嵌套循环。看一看。
为了更好地理解发生了什么,我们将把这条线分成更简单的部分:
十
for tens in "twenty thirty forty fifty sixty seventy eighty ninety".split():
print(tens)
输出:234567890
上一个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)
输出:零一二三四五六七八九
上一个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
列表。
最后,你输入的数字对应于列表中单词的索引
推荐阅读
- xamarin.forms - Xamarin Plugin.Permission。请求权限时出错
- flutter - Flutter:知道前置摄像头是否在镜像图像
- sql-server - Spring Boot 2.0 Hikari 自动连接不起作用
- coldfusion - 改写 lucee 的连接
- wso2 - 在 WSO2 身份服务器中启用单一注销并重定向到自定义登录页面
- android - 触发通知时唤醒设备
- flutter - 从 Visual Studio Code 运行所有 Flutter 单元测试
- c++ - 已声明但未初始化的变量存储什么?
- ruby-on-rails - 【carrierwave+ffmpeg】无法上传有声视频
- php - 递归删除最低级别的孩子 Symfony/Doctrine