使用嵌套的for循环和范围在Python 3中打印所需的显示

时间:2018-08-18 05:15:05

标签: python python-3.x

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

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

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

我知道我可以执行以下操作来打印第一行,但是对我来说,使用嵌套循环打印其余的行似乎不合逻辑。在给教员发电子邮件之前,我认为最好在这里问一些指点,以防我遗漏某些东西。有什么建议吗?

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=' ')

4 个答案:

答案 0 :(得分:2)

这应该有效:

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

答案 1 :(得分:2)

您应该使用OrderDict保存输入格式,这样将保留您的插入顺序。只需在您编写的代码上添加一个循环即可。像下面的例子一样

from collections import OrderedDict
type_of_string = OrderedDict({'SD': 7,'HD': 12,'CD': 5})
for key,value in type_of_string.items():
    for i in range(value):
        print(key + str(i), end=', ')
    print()

编辑 仅使用列表:

type_of_string = [['SD', 7],['HD', 11],['CD', 5]]
for a in type_of_string:
    for i in range(a[1]):
        print(a[0] + str(i), end=', ')
    print()

答案 2 :(得分:1)

或单线:

lot=[('SD',6), ('HD',11), ('CD',4)]
print('\n'.join(', '.join([x+str(i) for i in range(1,y+1)]) for x,y in lot))

输出:

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

答案 3 :(得分:1)

first_letters = ['S', 'H', 'C']
line_lengths = [7, 12, 5]

for i in range(3):
    for j in range(line_lengths[i]):
        print(first_letters[i] + 'D' + str(j) + ',', end = ' ')
    print() 

您缺少了外循环运行每一行的逻辑,而嵌套循环是针对一行中的每个元素的。希望这可以帮助。仅使用列表和嵌套循环即可解决。