Python字符串拆分顺序错误

时间:2016-12-05 18:54:47

标签: python

我当前的代码

defname,last_name):
    if not isinstance(reg, int) or \
       not isinstance(year, int) or \
       not isinstance(degree, str) or \
       not isinstance(other_name, str) or \
       not isinstance(last_name, str) :
       print("Invalid string argument")
    elif 0<=year<=4:
        l.append((reg,year,degree,other_name,last_name))
    else: print("Invalid year")

def p
    reg,year,degree,other_name,last_name = student.strip().split(" ",4)
    reg=int(reg)
    year=int(year)
    fullName=last_name+ ", " + other_name
    thisYear="Year " + str(year)
    print(format(fullName, "<32s")+format(reg,"<7d")+format(degree,">6s"),format(thisYear,">6s"))

如何使用正确的格式有效地做到这一点?我试图让它使用这两个函数并检查有效

3 个答案:

答案 0 :(得分:1)

那么,由于你打电话.split()的方式,因为它打印在那一边。用4调用它当然会限制它分裂4次。并且由于它从左向右分裂,一旦它进行了第4次分割(即在&#39; Homer&#39;之后),它将简单地返回整个字符串的其余部分(即。&#39; J辛普森&#39;。)

如果我是你,我会这样做:

reg,year,degree,*name = student.strip().split(" ")
name = list(reversed(name))
fullname = name[0] + ', ' + ' '.join(name[1:])

执行*name可以将多个令牌作为列表抓取,然后根据需要处理它们。

答案 1 :(得分:0)

首先,您不希望它打印Simpson, Homer J吗?

其次,它会打印J Simpson, Homer,因为这就是您的列表:[1342347, 2, G401, Homer, J Simpson]。 它以这种方式分割它,因为你告诉它在它看到的每个空间分裂,并最多创建4个单独的字符串。它不知道中间名属于other_name,所以你必须在字符串解析中做更多的工作才能使其按照需要运行。

答案 2 :(得分:0)

这是因为您将分割数限制为4.

因此,对于第三行,分割的第四个空间在“Homer”和“J”之间。因此,“J”和“Homer”在分割后处于相同的字符串中。

https://www.tutorialspoint.com/python/string_split.htm