2010-12-13 73 views
2

Comment choisir une seule ligne et choisir tous les mots sur cette ligne, puis les imprimer à l'écran en utilisant un ensemble. Voilà ce que j'ai jusqu'à présent:Choisissez un mot aléatoire sur une seule ligne en Python?

import random 

test = [''' 
line 1 
line 2 
line 3 
line 4 
line 5 
line 6 
'''] 
print (random.choice(test)) 

Répondre

3

Je pense que cela fait exactement ce que vous vous demandez:

print random.choice(test[0].split('\n')) 
line 5 

J'ai un sentiment que vous cherchez à faire un peu plus que cela, bien que .

+0

Utiliser '.splitlines()'? –

+2

Pourquoi 'tester [0]'? Cela vous donnera le premier caractère de 'test'. –

+0

Copier et coller mon code sous son code me donne la sortie suivante: Dans [7]: print random.choice (test [0] .split ('\ n')) ligne 3 Dans [8]: imprimer random.choice (test [0] .split ('\ n')) ligne 1 Tim, qu'est-ce que vous parlez? – JBWhitmore

1

Je suppose que vous voulez les prendre sans remplacement au hasard; si tout ce que vous faites est de choisir des mots au hasard, avec quelque chose comme

do until set empty 
    prick a random word and print it 

il (a) pas fin, et (b) répéter des mots en moyenne tous les 1/n fois pour n mots.

Il serait tentant d'utiliser un ensemble de Python, mais incommode il n'y a aucun moyen évident de choisir un élément aléatoire de l'ensemble puisqu'il est pas ordonné. (Vous pourriez faire un cas que set#pop fonctionnera puisqu'il prend l'article suivant arbitraire, mais si j'évaluais je ne donnerais pas ce plein crédit.) D'un autre côté, la description indique un ensemble.

Je ferais quelque chose comme ceci:

d'abord mettre les éléments dans une liste. Notez que ce que vous avez met une corde avec 10 lignes dans la liste ,, qui est votre liste a une longueur de 1. Je parie que vous êtes mieux comme initialisation

words = [ "test 1","test 2" # and so on 
] 

Ensuite, sélectionnez vos articles en utilisant comme choice

word = random.choice(words) 

Imprimer ce

print word 

et le retirer de la liste

words.remove(word) 

Mettez ça dans une boucle qui continue jusqu'à ce que vous manquez de mots. Vous obtenez quelque chose comme:

>>> import random 
>>> words = ['a', 'b', 'c' ] 
>>> while len(words) > 0: 
... word = random.choice(words) 
... print word 
... words.remove(word) 
... 
b 
a 
c 

gnibbler souligne que vous pourriez aussi avoir

import random 
words = [ ... ] 
shuf = random.shuffle(words) 
for i in shuf: 
    print i 

mais qui ne traite pas la liste comme un ensemble; cela dépend de l'existence d'un ordre implicite défini par shuffle.

+0

FTFY: Il n'y a pas de "println" en Python, et 'len()' est une fonction gratuite. Je pense que vous étiez codé dans Ruby par erreur? – zwol

+0

Obtenir vieux n'est pas pour les sissies. –

+0

pourquoi ne pas utiliser random.shuffle? –