2
votes

Problème de listes de hackerrank ~ Le cas de test standard fonctionne mais d'autres pas

Prenons une liste (list = []). Vous pouvez exécuter les commandes suivantes:

[6, 5, 10]
[1, 5, 9, 10]
[9, 5, 1]

Initialisez votre liste et lisez la valeur de suivi de lignes de commandes où chaque commande sera des types listés ci-dessus. Parcourez chaque commande dans l'ordre et effectuez l'opération correspondante sur votre liste.

Exemple d'entrée:

import sys

if __name__ == '__main__':
    N = int(input())

my_list = []
inputs  = []

for line in sys.stdin:
    inputs.append(line)

for item in inputs:
    if item[0:5] == 'print':
        print(my_list)
    elif item[0:2] == 'in':
        inserts = [s for s in item.split()][1:3]
        inserts = list(map(int, inserts))
        my_list.insert(inserts[0], inserts[1])
    elif item[0:3] == 'rem':
        inserts = list(map(int, [s for s in item.split()][1]))
        my_list.remove(inserts[0])
    elif item[0:2] == 'ap':
        inserts = list(map(int, [s for s in item.split()][1]))
        my_list.append(inserts[0])
    elif item[0:4] == 'sort':
        my_list.sort()
    elif item[0:3] == 'pop':
        my_list.pop()
    elif item[0:7] == 'reverse':
        my_list.reverse()

Mon code:

12
insert 0 5
insert 1 10
insert 0 6
print
remove 6
append 9
append 1
sort
print
pop
reverse
print

Je ne sais pas pourquoi mon code n'est pas approuvé lors de la soumission. Dans ce cas de test qu'ils ont fourni, mon code passe. Le résultat attendu est le suivant:

insert i e: Insert integer e at position .
print: Print the list.
remove e: Delete the first occurrence of integer e.
append e: Insert integer e at the end of the list.
sort: Sort the list.
pop: Pop the last element from the list.
reverse: Reverse the list.

Merci beaucoup pour l'aide!


2 commentaires

Vous lisez N depuis stdin mais vous ne l'utilisez jamais. Est-il possible que cela entraîne des problèmes lorsque le nombre de lignes dans le flux d'entrée est différent de N ? (notez que je n'ai pas lu les spécifications du problème)


Honnêtement, je ne sais pas si cela compte. D'après ce que je peux voir, cela ne devrait pas avoir d'impact sur le résultat, n'est-ce pas? Le premier nombre indique uniquement le nombre de commandes qu'il pourrait y avoir.


7 Réponses :


0
votes

Votre problème est que votre code d'ajout a un bogue lorsque le numéro à ajouter a plus d'un chiffre. Dans votre code ici

inserts = list(map(int, [s for s in item.split()][1]))
my_list.append(inserts[0])

par exemple si la commande "item" était "append 12", [s for s in item.split ()] [1] serait la chaîne "12", donc list (map (int, [s pour s dans item.split ()] [1])) mappe chaque caractère de cette chaîne à un entier, donnant vous [1, 2] plutôt que [12], et donc ma_liste.append (inserts [0]) ajouteriez le numéro 1 au lieu de 12. Alors corrigez cela et vous résoudrez votre problème.


1 commentaires

Merci beaucoup pour cela! Cela a résolu mon problème. J'apprécie l'aide.



0
votes

Le découpage des chaînes n'est pas une bonne idée. En outre, vous devez obtenir les entrées utilisateur N fois. Vous pouvez donc modifier votre solution comme ci-dessous:

if __name__ == '__main__':
    N = int(input())
    the_list = list()

    for _ in range(N):
        query = input().split()
        if query[0] == "print":
            print(the_list)
        elif query[0] == "insert":
            the_list.insert(int(query[1]), int(query[2]))
        elif query[0] == "remove":
            the_list.remove(int(query[1]))
        elif query[0] == "append":
            the_list.append(int(query[1]))
        elif query[0] == "sort":
            the_list = sorted(the_list)
        elif query[0] == "pop":
            the_list.pop()
        elif query[0] == "reverse":
            the_list.reverse()


2 commentaires

Pourquoi faisons-nous cela "query = input (). Split ()"? J'ai besoin de comprendre son but


@Rahul car nous devons obtenir le format approprié de l'entrée de l'utilisateur. N'oubliez pas que l'entrée utilisateur est une chaîne, mais nous avons besoin du premier mot sous forme de chaîne, mais les autres doivent être int pour résoudre le problème.



1
votes
if __name__ == '__main__':
    N = int(input())
    m=list()
    for i in range(N):
       method,*l=input().split()
       k=list(map(int,l))
       if len(k)==2:
          q=[k[0]]
          w=[k[1]]
       elif len(k)==1:
          q=[k[0]]
       if method =='insert':
          m.insert(q[0],w[0])
       elif method == 'append':
          m.append(q[0])
       elif  method == 'remove':
          m.remove(q[0])
       elif method =='print':
          print(m)
       elif method == 'reverse':
          m.reverse()
       elif method =='pop':
          m.pop()
       elif method == 'sort':
          m.sort()

1 commentaires

Bien que ce code puisse résoudre la question, y compris une explication expliquant comment et pourquoi cela résout le problème aiderait vraiment à améliorer la qualité de votre message, et entraînera probablement plus de votes à la hausse. N'oubliez pas que vous répondez à la question des lecteurs à l'avenir, pas seulement à la personne qui la pose maintenant. Veuillez modifier votre réponse pour ajouter des explications et donner une indication des limitations et hypothèses applicables.



1
votes
def execute(lst, cmd, *args):
    if cmd == 'insert':
        lst.insert(int(args[0]), int(args[1]))
    elif cmd == 'print':
        print(lst)
    elif cmd == 'remove':
        lst.remove(int(args[0]))
    elif cmd == 'append':
        lst.append(int(args[0]))
    elif cmd == 'sort':
        lst.sort()
    elif cmd == 'reverse':
        lst.reverse()
    elif cmd == 'pop':
        lst.pop()
   else: 
        print("Command not recognized!")

lst = []
for _ in range(int(input())):
execute(lst, *input().split())

0 commentaires

0
votes
if __name__ == '__main__':
N = int(input())
reqarr = []
for i in range(0,N):
    inplist = (input().split())
    if(inplist[0] == "insert" ):
        reqarr.insert(int(inplist[1]),int(inplist[2]))
    elif(inplist[0] == "print"):
        print(reqarr)
    elif(inplist[0] == "remove"):
        reqarr.remove(int(inplist[1]))
    elif(inplist[0] == "append"):
        reqarr.append(int(inplist[1])) 
    elif(inplist[0]=="sort"):
        reqarr.sort()   
    elif(inplist[0]=="reverse"):
        reqarr.reverse() 
    elif(inplist[0] == "pop"):
        reqarr.pop()              
                
    

2 commentaires

Bienvenue à SO. Bien que nous vous remercions pour votre réponse, il serait préférable qu'elle apporte une valeur supplémentaire en plus des autres réponses. Dans ce cas, votre réponse n'apporte pas de valeur supplémentaire, car hevalhazalkurt a déjà publié cette solution. Si une réponse précédente vous a été utile, vous devriez la voter une fois que vous avez une réputation suffisante.


D'accord, j'essaierai de le faire à partir des prochaines contributions



0
votes
def operation(last_value1,operation_name,*number):
    list_number = last_value1
    if operation_name.lower() == 'insert':
        list_number.insert(int(number[0]),int(number[1]))
    elif operation_name.lower() == 'remove':
        list_number.remove(int(number[0]))
    elif operation_name.lower() == 'append':
        list_number.append(int(number[0]))
    elif operation_name.lower() == 'sort':
        list_number = sorted(list_number)
    elif operation_name.lower() == 'print':
        print(list_number)
    elif operation_name.lower() == 'pop':
        list_number.pop()
    elif operation_name.lower() == 'reverse':
        list_number= list_number[::-1]
    return list_number

N = int(input())
last_value = []
for count in range(0,N):
        command_input = input("Please enter the command with number seperated by space")
        command_input = command_input.split()
        if len(command_input) == 3:
            last_value = operation(last_value,command_input[0],command_input[1],command_input[2])
        elif len(command_input) == 2:
            last_value= operation(last_value,command_input[0],command_input[1])
        else:
            last_value = operation(last_value,command_input[0])

1 commentaires

Veuillez ne pas publier uniquement le code comme réponse, mais également expliquer ce que fait votre code et comment il résout le problème de la question. Les réponses avec une explication sont généralement plus utiles et de meilleure qualité, et sont plus susceptibles d'attirer des votes positifs.



0
votes
*if __name__ == '__main__':
    N = int(input())
    the_list = list()
    
    for cmd in range(N):
        input_cmd = input().split()
        if input_cmd[0] == 'print':
            print(the_list)
        
        elif input_cmd[0] == 'insert':
            the_list.insert(int(input_cmd[1]), int(input_cmd[2]))
        
        elif input_cmd[0] == 'remove':
            the_list.remove(int(input_cmd[1]))
        
        elif input_cmd[0] == 'append':
            the_list.append(int(input_cmd[1]))
        
        elif input_cmd[0] == 'sort':
            the_list = sorted(the_list)
            
        elif input_cmd[0] == 'pop':
            the_list.pop()
        
        elif input_cmd[0] == 'reverse':
            the_list.reverse()*
        

1 commentaires

Bien que les réponses au code seulement puissent aider dans un cas spécifique, veuillez fournir des détails sur le pourquoi et le comment cela fonctionne, afin que des problèmes similaires puissent être résolus.