2016-10-21 1 views
1

(oui, je l'ai cherché tout autour d'une solution, et, si je ne le vois, je n'ai pas pu rapporter à ma question. Je suisGarder Python d'espacement après la rupture d'une ligne lors de l'impression d'une liste

J'ai un travail à faire, et il me dit: "L'utilisateur entrera X et Y. Montrer une séquence de 1 à Y, avec seulement X éléments chaque ligne. "

2 4 par exemple comme entrée

1 2 

3 4 
par exemple
1 2 

3 4 

5 6 

D'accord ... Alors, je pensais à faire ceci:

line, final = input().split() 
line = int(line) 
final = int(final) 
List = [] 
i = 0 
total = (final // line) 
spot = 0 
correction = 0 
k = 1 

if i != final: 
List = list(range(1, final + 1, 1)) 
i += 1 

while k != total: 
spot = line * k + correction 
correction += 1 
k += 1 
list.insert(List, spot, '\n') 

print(*List) 

Ok. J'ai donc réussi à construire ma liste de 1 à la var "finale". a également réussi à trouver des points sur lesquels (donc var « spot ») ma nouvelle ligne seraient créés. (Nous avons dû utiliser un var de correction et un peu de mathématiques pour l'atteindre, mais il est 10/10)

Jusqu'à présent, si bon. Le seul problème est ce travail est censé être livré sur URI en ligne Juge, et il demande que mon résultat montre comme ceci:

2 10 comme entrée

1 2 

3 4 

5 6 

7 8 

9 10 

Et, en utilisant le code que je viens de publier , Je reçois ceci comme résultat:

1 2 

3 4 

5 6 

7 8 

9 10 

Ainsi, il est dit que mon code est faux. J'ai tout essayé pour enlever ces espaces (je pense). Utiliser sys ne fonctionnera pas car il imprime seulement un argument. Essayé en utilisant join (mais je aurais pu le faire mal, comme je suis nouveau de toute façon)

Eh bien, je l'ai essayé quoi que ce soit à peu près. J'espère que n'importe qui peut m'aider.

Merci d'avance :)

+0

Vous pouvez spécifier un argument 'end' à votre déclaration d'impression. 'pour i dans la plage (10): print (i, end = '')' imprimera 0-9 tous sur la même ligne. Aussi, vous pouvez faire '" ".join (str (char) pour char dans my_list)' pour obtenir une version concaténée de votre liste sans espaces. – sytech

Répondre

0

Le problème avec l'approche que vous utilisez est le résultat d'un espace en cours d'impression après chaque caractère "\n" dans la séries. Tandis que l'idée était assez intelligente, malheureusement, je pense que cela signifie que vous devrez adopter une approche différente en insérant le caractère de nouvelle ligne dans la liste.

Essayez cette approche: (ÉDITÉ)

x, y = input().split() 
x, y = int(x), int(y) 

for i in range(1, y+1): 
    if i % x == 0 or i == y: 
     print(i) 
    else: 
     print(i, end=" ") 

sortie pour 3 11

1 2 3 
4 5 6 
7 8 9 
10 11 

sortie pour 2 10

1 2 
3 4 
5 6 
7 8 
9 10 
+0

En fait, il contient des bogues. Éditera. – sytech

+0

Modification effectuée. Je crois que cela devrait satisfaire les conditions. Étonnamment simple! – sytech

+0

Fait une autre édition, juste au cas où la nouvelle ligne finale est importante. – sytech

0

I diviser l'entrée d'utilisateur en deux chaînes puis les convertir en int et comapre si y supérieur à x par 2 parce que c'est minimum pour bénéficier de votre séquence Puis-je faire une liste de 1 à y et itérer dessus 2 élément pour chaque itération les imprimer

x,y=input().split() 
if int(y)>int(x)+2: 
    s=range(1,int(y)+1) 
    for i in range(0,len(s),2): 
     print(' '.join(str(d) for d in s[i:i+2])) 

résultat:

1 2 
3 4 
5 6 
7 8 
9 10 
+3

Peut-être une explication de ce qui ne va pas avec le code OP, et comment cela résout-il? Vous n'avez pas besoin d'envoyer un objet 'range' à' list' pour obtenir sa longueur, soit dit en passant. – TigerhawkT3

+0

@ TigerhawkT3 explication dans votre message ne peut pas copier-passé maintenant que vous avez posté pendant que je suis en train d'éditer: D –

+0

Ne serait-ce pas réellement sortie «1 2»? Je pense que OP a besoin qu'ils soient imprimés comme des ints, pas des ficelles. – sytech

0

utilisation iter outils pour prendre d'un itérable en morceaux:

>>> import itertools 
>>> def print_stuff(x,y): 
... it = iter(range(1, y + 1)) 
... chunk = list(itertools.islice(it,X)) 
... while chunk: 
...  print(*chunk) 
...  chunk = list(itertools.islice(it,X)) 
... 
>>> print_stuff(2,4) 
1 2 
3 4 
>>> 

Et ici:

>>> print_stuff(2,10) 
1 2 
3 4 
5 6 
7 8 
9 10 
>>> 
+0

Je ne suis pas sûr si URI a itertools, mais merci beaucoup, je vais analyser ce que vous avez fait et essayer d'intégrer à partir de maintenant Quoi que je fasse! merci encore –

+0

@ AndréCaruso qu'est-ce que l'URI? 'itertools' fait partie de la bibliothèque standard de Python. –

+0

C'est un outil en ligne pour les professeurs d'université pour vous assigner des travaux et des emplois. Vous soumettez un code, sélectionnez votre langue (entre python2, 3, java, c et quelques autres) et ils jugent si c'est correct ou non. J'ai essayé d'importer des librairies auparavant et ça m'a donné une erreur, c'est pourquoi je n'ai pas utilisé iter (j'avais lu quelque part ailleurs) Encore, tu m'as beaucoup aidé, malheureusement, je ne peux pas tout marquer ici comme une réponse, mais merci beaucoup! –

1

Vous avez construit une liste qui comprend chaque caractère nécessaire, y compris le saut de ligne. Par conséquent, vous avez une liste comme ceci:

[1, 2, '\n', 3, 4, '\n'...] 

Lorsque vous déballez arguments à print(), il met un séparateur entre chaque argument, par défaut à un espace.Ainsi, il imprime 1, puis un espace, puis 2, puis un espace, puis un saut de ligne, puis un espace ... Et c'est pourquoi vous avez un espace au début de chaque ligne.

Au lieu d'insérer des sauts de ligne dans une liste, morceau cette liste avec iter et next:

>>> def chunks(x, y): 
...  i = iter(range(1, y+1)) 
...  for row in range(y//x): 
...    print(*(next(i) for _ in range(x))) 
...  t = tuple(i) 
...  if t: 
...    print(*t) 
... 
>>> chunks(2, 6) 
1 2 
3 4 
5 6 
>>> chunks(2, 7) 
1 2 
3 4 
5 6 
7 
+0

Je ne peux malheureusement pas tout marquer ici comme une réponse. J'ai marqué le plus simple pour moi de comprendre, pourtant, tout le monde ici m'a beaucoup aidé, y compris vous, merci beaucoup! J'obtiendrai votre code et l'analyserai dans un autre moment pour mieux le comprendre. Merci beaucoup! –