Сортировка Kattis

#python

#python

Вопрос:

Привет, пожалуйста, мне нужна помощь в решении проблемы: это мой код :

 n=int(input())
W=[]
while(n!=0):
    for i in range(n):
        W.append(input())
    for i in range(0,len(W)-1) :
        for j in range(i 1,len(W)):
            if W[i][0:2] > W[j][0:2]:
                Aide=W[i]
                W[i]=W[j]
                W[j]=Aide
    n=int(input())
    
    for word in W:
        print(word)
        
    print('n')
    W=[]
  

он работает для двух входных данных и неправильного ответа после.. Я не знаю, чего не хватает!!!
(проблема: напишите программу, которая сортирует список фамилий учащихся, но при сортировке используются только первые две буквы имени. Ничто другое в имени не используется для сортировки. Однако, если два имени имеют одинаковые первые две буквы, они должны оставаться в том же порядке, что и во входных данных (это известно как «стабильная сортировка»). Сортировка чувствительна к регистру на основе порядка ASCII (с сортировкой прописных букв перед строчными буквами, т.Е..)

Комментарии:

1. насколько ясна постановка задачи, было бы лучше, если бы вы опубликовали образец ввода и вывода, в вашем случае список имен

2. @python_learner Я сделал этот код в компиляторе kattis, и он работает только для первого ввода, после того, как он дает мне неправильный ответ.. Я не знаю, какой ввод выдает ошибку..

3. вы можете вставить любой образец ввода и вывода, поэтому любой, кто просматривает вопрос, может знать, с чем работать

Ответ №1:

Ну, я попытался исправить ваш код, что я сделал, так это изменил вашу сортировку на лямбда-функцию, где она использует функцию .sort() и сортирует с использованием двух первых букв (потому что сортировка строк в python сортирует с использованием значения ASCII каждого символа, поэтому учитывается, что

 while (True):
    n = int(input())
    W = []
    if (n == 0):
        break
    for i in range(n):
        W.append(input())
    W.sort(key=lambda x:(x[0:2]))
    for word in W:
        print(word)
    print()
  

Я думаю, вы хотели правильно использовать BubbleSort, я полагаю, ваша реализация неверна, вот почему. это пузырьковая сортировка в этой проблеме

 for i in range(len(W) - 1):
        for j in range(len(W)-i-1):
            if W[j][0:2]> W[j 1][0:2]:
                W[j],W[j 1]=W[j 1],W[j]
  

Комментарии:

1. Я предполагаю, что OP хочет вручную написать алгоритм сортировки, а не использовать ключевой параметр

2. @python_learner я думаю, что они говорят об этой проблеме open.kattis.com/problems/sortofsorting

3. спасибо за лямбда-функцию, она работает .. но я также сравнил только две буквы fisrt `if W [i] [0: 2]> W [j] [0: 2]: `но у меня не получилось .. я не знаю, что не так