首页 > 解决方案 > 使用嵌套的 for 循环和范围在 Python 3 中打印所需的显示

问题描述

我遇到了一个问题,我被要求编写一个使用嵌套循环和 range 函数来打印以下显示的函数:

SD1, SD2, SD3, SD4, SD5, SD6,
HD1, HD2, HD3, HD4, HD4, HD6, HD7, HD8, HD9, HD10, HD11,
CD1, CD2, CD3, CD4

我知道如何使用 for 循环和范围来打印每一行,但我不确定如何使用嵌套循环来打印所需的显示。我们还没有学习字典,我们只是真正介绍了如何使用列表。

我知道我可以执行以下操作来打印第一行,但使用嵌套循环打印其余部分对我来说似乎不合逻辑。在给导师发电子邮件之前,我认为最好在这里寻求指点,以防我遗漏了什么。有什么建议么?

for i in range(1, 7):
    print(f'SD{i},', end=' ')
print('')
for i in range(1,12):
    print(f'HD{i},' end=' ')
print('')
for i in range(1,5):
    print(f'CD{i},' end=' ')

标签: pythonpython-3.x

解决方案


这应该有效:

In [1]: idx_dict = {'SD': 6, 'HD': 11, 'CD': 4}

In [2]: for letter, idx in idx_dict.items():
    ...:     print(', '.join(f'{letter}{i+1}' for i in range(int(idx))))

SD1, SD2, SD3, SD4, SD5, SD6
HD1, HD2, HD3, HD4, HD5, HD6, HD7, HD8, HD9, HD10, HD11
CD1, CD2, CD3, CD4

如果您需要更明确地使用嵌套循环,您可以这样做:

for letter, idx in idx_dict.items():
    output = []
    for i in range(int(idx)):
        output.append(f'{letter}{i+1}')
    print(', '.join(output))

这是一种不使用字典的方法:

In [20]: letters = ['SD', 'HD', 'CD']

In [21]: max_indexes = [6, 11, 4]

In [22]: for letter, max_idx in zip(letters, max_indexes):
    ...:     output = []
    ...:     for i in range(max_idx):
    ...:         output.append(f'{letter}{i+1}')
    ...:     print(', '.join(output))

如果您不想使用该zip功能,则可以使用enumerate

In [23]: for idx, letter in enumerate(letters):
    ...:     output = []
    ...:     for i in range(max_indexes[idx]):
    ...:         output.append(f'{letter}{i+1}')
    ...:     print(', '.join(output))

推荐阅读