2016-07-28 9 views
-1

Ich sehe den Punkt der Frage bleibt in der ersten elif:Wie kann ich ein Wort erstellen, das den vorherigen Buchstaben des Worts nicht enthält?

import random as rnd 

vowels="aeiou" 
consonants="bcdfghlmnpqrstvz" 
alphabet=vowels+consonants 

vocabulary={} 
index=0 
word="" 
positions=[] 
while index<5: 
    random_lenght=rnd.randint(2,5) 
    while len(word)<random_lenght: 
     random_letter=rnd.randint(0,len(alphabet)-1) 
     if len(word)==0: 
      word+=alphabet[random_letter] 
     elif random_letter != positions[-1] and len(word)>0: 
      if word[-1] not in vowels: 
       word+=alphabet[random_letter] 
      if word[-1] not in consonants: 
       word+=alphabet[random_letter] 
     elif random_letter == positions[-1]: 
      break   
     if random_letter not in positions: 
      positions.append(random_letter) 
    if word not in vocabulary: 
     vocabulary[index]=word 
     index+=1 
    word="" 

Das Ergebnis mich nicht befriedigen, wie Sie annehmen:

{0: 'in', 1: 'th', 2: 'cuu', 3: 'th', 4: 'vd'} 

Jede Hilfe würde geschätzt.

+0

Nach Ihrer Frage Titel, ist die Ausgabe korrekt. Keines dieser "Wörter" enthält Zeichen, die in dem Wort davor vorkommen. – usr2564301

+0

Vielleicht möchten Sie 'wenn Wort nicht im Wortschatz ändern:' mit 'wenn Wort nicht im Vokabular.Values ​​():' –

+0

"Cuu" enthält eine mehr u als ich will. 'vd' enthält zwei Konsonanten. Ich möchte nur einen Vokal und einen Konsonanten für jedes Paar von zwei Buchstaben. –

Antwort

0

Was sollten Sie so etwas wie dies wollen (basierend auf der Implementierung):

import random as rnd 

vowels="aeiou" 
consonants="bcdfghlmnpqrstvz" 
alphabet=vowels+consonants 

vocabulary={} 
index=0 
word="" 
positions=[] 
while index<5: 
    random_lenght=rnd.randint(2,5) 
    while len(word)<random_lenght: 
     random_letter=rnd.randint(0,len(alphabet)-1) 
     if len(word) == 0: 
      word+=alphabet[random_letter] 
     elif random_letter != positions[-1] and len(word)>0: 
      if word[-1] not in vowels and alphabet[random_letter] not in consonants: 
       word+=alphabet[random_letter] 
      elif word[-1] not in consonants and alphabet[random_letter] not in vowels: 
       word+=alphabet[random_letter] 
     if random_letter not in positions: 
      positions.append(random_letter) 
    if word not in vocabulary: 
     vocabulary[index]=word 
     index+=1 
    word="" 

Und eine andere Version:

import string 
import random 

isVowel = lambda letter: letter in "aeiou" 

def generateWord(lengthMin, lengthMax): 
    word = "" 
    wordLength = random.randint(lengthMin, lengthMax) 
    while len(word) != wordLength: 
     letter = string.ascii_lowercase[random.randint(0,25)] 
     if len(word) == 0 or isVowel(word[-1]) != isVowel(letter): 
      word = word + letter 
    return word 

for i in range(0, 5): 
    print(generateWord(2, 5)) 
+0

sieht aus wie Sie die Konsonanten in der ersten Kontrolle und die Vokale in der zweiten verwendet. In meiner letzten Version habe ich das Gegenteil benutzt. Aber ich verstehe nicht, warum ich ein anderes Ergebnis hatte –

+0

Ich habe "wenn Wort [-1] nicht in Vokalen und Alphabet [Random_letter] nicht in Vokale:" Sie verwendet "wenn Wort [-1] nicht in Vokale und alphabet [random_letter] nicht im Konsonanten: " Jetzt habe ich es –

+0

Froh, dass es geholfen hat :) – Sygmei

Verwandte Themen