2017-08-26 24 views
1

運行的函數有一個代碼:我如何多次在Python

import random 

vowels, consonants='aeiou','bcdfghjklmnpqrstvwxyz' 

terms = int(input("How many letters you want for your baby's name? ")) 

def babyname(): 
    j=[] 
    for i in range(0, terms): 
     k = input("Would you like a [v]owel or [c]onsonant: ") 
     if k.lower() == 'v': 
      j.append(random.choice(vowels)) 
     elif k.lower() == 'c': 
      j.append(random.choice(consonants)) 
     else: 
      print("Unknown Input: "+ k) 
    for x in range(0, 10): 
     print(''.join(j)) 

babyname() 

輸入:我可以輸入一個號碼說5字母和v或c對於那些數量的字母數。

預期輸出:對於輸入,我想要生成文本j 10次,每個文本不同。對於示例輸入,預期的輸出應該是 - sdfes gdadf nkadj就像這10個單詞。

輸出產生:我得到了一個輸出,比如sdfes sdfes sdfes - 10次輸出相同的文字。

如何解決這個問題?

回答

2

如果要打印10個不同的名稱,但要求元音或恆定的問題一次,你會做這樣的事情:

import random 

vowels, consonants='aeiou','bcdfghjklmnpqrstvwxyz' 

terms = int(input("How many letters you want for your baby's name? ")) 

def babyname(): 
    choices = [] 
    for i in range(terms): 
     k = input("Would you like a [v]owel or [c]onsonant: ") 
     choices.append(k) 

    for x in range(10): 
     j = [] 
     for k in choices: 
      if k.lower() == 'v': 
       j.append(random.choice(vowels)) 
      elif k.lower() == 'c': 
       j.append(random.choice(consonants)) 
      else: 
       print("Unknown Input: " + k) 
     print(''.join(j)) 

babyname() 

編輯:需要注意的是,如果你不輸入vc與上面的代碼,它會告訴你10噸imes是錯誤的,只有在你給出所有的輸入之後。因此,像這樣的東西可能是更好的方法:

import random 

vowels, consonants='aeiou','bcdfghjklmnpqrstvwxyz' 

terms = int(input("How many letters you want for your baby's name? ")) 

def babyname(): 
    choices = [] 
    for i in range(terms): 
     while True: 
      k = input("Would you like a [v]owel or [c]onsonant: ") 
      if k.lower() in ('v', 'c'): 
       break 
      else: 
       print("Unknown Input: " + k) 
     choices.append(k.lower()) 

    for x in range(10): 
     j = [] 
     for k in choices: 
      if k == 'v': 
       j.append(random.choice(vowels)) 
      elif k == 'c': 
       j.append(random.choice(consonants)) 
     print(''.join(j)) 

babyname() 
0

因爲你是在環接合相同的JList 10倍:

for x in range(0, 10): 
     print(''.join(j)) 
+0

是的。如何解決這個問題? – Andrew

0

你得到這一點,因爲你只組成的字符串一次印刷10次在最後的解決辦法是將整個過程循環10次。像

def babyname(): 
for n in range(0,10): 
    j=[] 
    for i in range(0, terms): 
    k = input("Would you like a [v]owel or [c]onsonant: ") 
    if k.lower() == 'v': 
     j.append(random.choice(vowels)) 
    elif k.lower() == 'c': 
     j.append(random.choice(consonants)) 
    else: 
     print("Unknown Input: "+ k) 
    print(''.join(j)) 

babyname() 

要循環相同的輸出10倍,你可以做

def babyname(): 
inp="" 
for i in range(0, terms): 
    k = input("Would you like a [v]owel or [c]onsonant: ") 
    if k.lower() == 'v' || k.lower()=='c': 
    inp+=k 
    else: 
    print("Unknown Input: "+ k) 
for n in range(0,10): 
    j=[] 
    for v in inp: 
    if k.lower()=='v': 
    j.append(random.choice(vowels)) 
    elif k.lower() == 'c': 
    j.append(random.choice(consonants) 
    print(''.join(j)) 
+0

這裏的輸入必須給(10 *條)次。取而代之的是將輸入存儲在一個列表中,然後迭代10次。 – akp

0

您生成一個字符串j並打印它10次。嘗試在數組中存儲'v'和'c'選項,然後在循環中運行一個隨機函數。 假設你的j將是'cvccv'

for i in range (0, 10): 
    name = [] 
    for c in j: 
     if sign == 'v': 
      name.append(random.choice(vowels)) 
     if sign == 'c': 
      name.append(random.choice(consonants)) 
    print(name)