+25 投票
分类:Python编程与实践 | 用户: (45.4k 分)

4 个回答

+10 投票
用户: (5.8k 分)
修改于 用户:

用find :

def split_name(s):
    # 传入string, 返回list
    ans = []
    index1 = 0
    while True:
        index2 = s.find(" ", index1)
        if index2 == -1:
            ans.append(s[0:index1-1])
            ans.append(int(s[index1:-1]))
            break
        index1 = index2+1
    return ans


f = open('score.txt','r')
students = tuple(f.readlines())
f.close()
name_list = []
i = 0
for student in students:
    name_list.append(split_name(student))
sorted_ans = sorted(name_list, key=(lambda x:x[1]), reverse=True)
# x为name_list中的可迭代对象(一维列表),这里只取一维列表的下标为1的元素进行比较
print(sorted_ans)

用 split + strip + join:

f = open('score.txt','r')
students = tuple(f.readlines())
f.close()
name_list = []
i = 0
for student in students:
    student.strip('\n')
    raw = student.split()
    score = raw.pop()
    name = ' '.join(raw)
    name_list.append([name, int(score)])
sorted_ans = sorted(name_list, key=(lambda x:x[1]), reverse=True)
# x为name_list中的可迭代对象(一维列表),这里只取一维列表的下标为1的元素进行比较
print(sorted_ans)

刚发现没有将字符串类型的分数转为整形...还有排序没逆序...改了一下

用户: (1.5k 分)
修改于 用户:
感谢大佬的代码给了鄙人不少思路
+5 投票
用户: (1.5k 分)
#用find迭代(notebook):

s='Michael Jackson 100\n'
k1=0;
k2=0;
while True:
    k1=s[k2:].find(" ")
    if(k1==-1): break
    k2+=k1+1
s[:k2-1],s[k2:-1]

#用rfind+strip:

s='Michael Jackson 100\n'
s=s.strip('\n')
k=s.rfind(" ")
s[:k],s[k+1:]
+2 投票
用户: (3.1k 分)
#使用find()
name_list = []
f = open('score.txt','r')
students = tuple(f.readlines())
for student in students:
    s_index1 = 0
    while student.find(' ', s_index1) != -1:
        s_index2 = student.find(' ', s_index1)
        s_index1 = s_index2 + 1
    name = student[:s_index2]
    score = student[s_index2 + 1:-1]
    name_list.append([name, score])
print(name_list)

#使用count函数得空格数量,两层循环找到最后一个空格的下标
f = open('score.txt','r')
students = tuple(f.readlines())
name_list = []
for student in students:
    frq = student.count(' ')
    s_index = 0
    index = 0
    for i in student:
        if i == ' ':
            s_index += 1
            if s_index == frq:
                name = student[:index]
                score = student[index + 1:-1]
                break
        index += 1
    name_list.append([name, score])
print(name_list)

 

0 投票
用户: (570 分)

使用非常基础的方法完成了一下qwq…

a="Michael Jackson 100\n"
b=0

while 1:
    b=a.find(' ',b+1)
    if b==-1:
        break
    else:
        c=b #检测最后一个空格的位置

name=a[0:c]#将最后一个空格之前的内容存储为名字

d=a.find('\n',c)#检测回车位置

score=int(a[c+1:d])#将回车位前,最后一个空格后的内容存储为成绩,完成对字符串内信息的分离(姓名,成绩)

print(name,' ',score)#输出
欢迎来到 爱可可Q&A ,有什么问题可以尽管在这里提问,你将会收到其他成员的热心回答。
...