首页 > 解决方案 > 循环打印太多次

问题描述

在此处输入图像描述

def main():
    lightning = dict()
    with open("lightning.txt","r") as f:
        for name,goals,assists in zip(f,f,f):
            lightning[name.strip()] = [int(goals),int(assists)]
        
    f.close()

    title_Player = 'Player'
    title_Goals = 'Goals'
    title_Assists = 'Assists'
    title_Total = 'Total'

    print('{:<10}{:^6}{:^8}{:^6}'.format(title_Player, title_Goals, title_Assists, title_Total))
    highest_points = 0

    for k in lightning:
        goals = lightning[k][0]
        assist = lightning[k][1]
        total = goals + assist
        print('{:<8}'.format(k), end = ' ')
    
        for v in lightning[k]:
            print('{:^6}{:^8}'.format(goals, assist), end = ' ')
        print('{:^6}'.format(total))


        if total > highest_points:
            highest_points = total
            top_scorer = k
    print(top_scorer, 'is the top scorer with', highest_points, 'points')

if __name__ == '__main__':
    main()

这是我的代码,目标和辅助在输出中显示了两次,我尝试使用部分 for 循环进行调整,但没有任何成功。但是,所有列格式都是正确的。

标签: dictionaryfor-loop

解决方案


就在这儿:

for v in lightning[k]:
        print('{:^6}{:^8}'.format(goals, assist), end = ' ')

由于您正在迭代 Lightning[k](它有两个值,目标和助攻),因此您正在运行该打印语句(打印出目标和助攻)两次。相反,为了适合您的表格标题,您可能应该更改以下内容:

print('{:<8}'.format(k), end = ' ')

for v in lightning[k]:
    print('{:^6}{:^8}'.format(goals, assist), end = ' ')
print('{:^6}'.format(total))

对此:

print('{:<10}{:^6}{:^8}{:^6}'.format(k, goals, assist, total))

这将在与标题中的列(10、6、8、6)相同大小的列中一次打印名称、目标、助攻和总数。


推荐阅读