我遇到一个问题,要求我编写一个使用嵌套循环的函数,并使用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=' ')
答案 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()
您缺少了外循环运行每一行的逻辑,而嵌套循环是针对一行中的每个元素的。希望这可以帮助。仅使用列表和嵌套循环即可解决。