2016-12-07 2 views
0

Если мой список в текстовом файле имеет следующийPython - Печать Обратный Имя Заказать

Я хочу, чтобы напечатать как

Однако мой текущий код выводит его из как

Мой код:

def addStudent(student): 
    reg,year,degree,*name= student.strip().split(" ") 
    name = list(reversed(name)) 
    fullName = name[0] + ", " + " ".join(name[1:]) 
    return (reg,year,degree,name,fullName) 

def employee(employee): 
    reg,year,degree,*name,fullName = employe 
    print(format(fullName, "<32s")+format(reg,"<7d")+format(degree,">6s"),format(thisYear,">6s")) 

Как изменить порядок последних двух частей имени? В какой области мой код неправильный, потому что я не уверен, как еще его изменить. Если я делаю добавить оператор печати после обратной функции она разделите каждую часть имени в виде строки, но когда он присоединяется, он делает это в неправильном порядке

+0

это не самый чистый способ, но вы попытались получить доступ к именам по индексу – WhatsThePoint

+0

Я мог бы сделать, но количество «других имен» варьируется, поэтому я не могу быть слишком точным с индексированием –

+0

, который действительно приходил на ум, когда я был на самом деле пытается дать его как ответ – WhatsThePoint

ответ

2

Только не обратный список:

def addStudent(student): 
    reg,year,degree,*name= student.strip().split() 
    fullName = "%s, %s" % (name[-1], " ".join(name[:-1])) 
    return (reg, year, degree, name, fullName) 
+0

Что делает ''% s,% s "%' part do? Я не совсем понимаю процентные знаки, не могли бы вы немного объяснить спасибо –

+0

''% s,% s "% (value1, value2)' - [форматирование строки старого стиля] (https://docs.python.org /2/library/stdtypes.html#string-formatting-operations). –

1

Или изменить эту строку

fullName = name[0] + ", " + " ".join(name[1:]) 

к этому

fullName = name[0] + ", " + " ".join(name[-1:0:-1]) 

Edit:

dat = '1234567 1 C100 Bartholomew Homer Simpson' 

def addStudent(student): 
    reg,year,degree,*name= student.strip().split(" ") 
    name = list(reversed(name)) 
# You have now:: 
#  name = ['Simpson', 'Homer', 'Bartholomew'] 
# Therefore , name[-1:0:-1] 
#  will select from last item in list 'Bartholomew to 
#  the 0th one, the 0th being excluded in reverse 
    fullName = name[0] + ", " + " ".join(name[-1:0:-1]) 

    return (reg,year,degree,name,fullName) 

def printStud(studentTuple): 
    reg,year,degree,*name,fullName = studentTuple 
    reg = int(reg) 
    thisYear = "Year "+str(year) 
    print(format(fullName, "<32s")+format(reg,"<7d")+format(degree,">6s"),format(thisYear,">6s")) 

Выход:

In [1]: 
Simpson, Bartholomew Homer  1234567 C100 Year 1 
0

Если вам нужно отсортированные имена, вы можете отсортировать их с помощью sorted()

a=["metallica", "therion", "acdc"] 
print a[0],", "+" ".join(sorted(a[1:])) 

из:

METALLICA, ACDC Therion

Смежные вопросы