首页 > 解决方案 > 为什么我的程序在行首添加了额外的空格?

问题描述

您好,希望您能帮到我,

我正在尝试制作一种算法,该算法采用带有名称列表的 txt 文件,将它们随机重新排序并将它们分配给团队。

它有效,我唯一的问题是,由于某种原因,它在列表的所有行中添加了一个额外的空间,除了第一个元素。它不是 txt 文件,那里的列表很好。

例如,我想要这样的输出:

team 1
dude1
dude2
team 2
dude3
dude4

相反,它这样做:

team 1
 dude1
 dude2
 team 2
 dude3
 dude4

所以团队 1 在没有空间的情况下这样做,但其他一切在开始时都有空间。

这是代码:

import random

raw_list = open("list.txt","r")

people_list = []
for line in raw_list.readlines():
    people_list.append(line)
    
raw_list.close()

team_list = []

team_num = int(input("enter the number of teams you want "))

len_people = int(len(people_list))
teams = len_people / team_num
len_people=int(len_people+team_num)

j = 1
i = 1
for n in range(len_people):
    if i == 1:
        if j>team_num:
            popper = random.randint(0, (len(people_list)) - 1)
            team_list.append(people_list.pop(popper))
            
        else:
            team_list.append(f"Team {j}\n")
            i = i + 1
            
    elif i < teams:
        i=i+1
        popper = random.randint(0, (len(people_list)) - 1)
        team_list.append(people_list.pop(popper))
        
    else:
        i = 1
        j = j + 1
        popper = random.randint(0, (len(people_list)) - 1)
        team_list.append(people_list.pop(popper))
           
    
print (*team_list)

谢谢

标签: pythonlistspacestxt

解决方案


strip如果从文件中读取名称时删除换行符,格式化会更容易。一般来说,如果您将数据与您想要的显示方式分开,那么生活会更轻松;稍后添加格式很容易,但是当它全部混合到所有内容中时很难删除/修改它。

import random

# Get complete list of people.
with open("list.txt", "r") as raw_list:
    people_list = [line.strip() for line in raw_list.readlines()]

# Build list of (empty) teams.
team_list = [[] for _ in range(int(
    input("enter the number of teams you want ")
))]

# Shuffle people and assign them to each team in turn.
random.shuffle(people_list)
for i, person in enumerate(people_list):
    team_list[i % len(team_list)].append(person)

# Output.
for i, team in enumerate(team_list):
    print(f"Team {i+1}")
    for person in team:
        print(person)

印刷:

enter the number of teams you want 2
Team 1
dude2
dude3
Team 2
dude4
dude1

每个team只包含一个名称列表,没有额外的换行符等,这意味着如果您决定要更改显示团队的方式,这非常简单:

for i, team in enumerate(team_list):
    print(f"Team {i+1}:", ", ".join(team))
enter the number of teams you want 2
Team 1: dude2, dude3
Team 2: dude1, dude4

推荐阅读