如何在python中多次运行一个函数

时间:2017-08-26 12:05:56

标签: python python-3.x

我有一个代码:

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次。而不是得到10个不同的文本。

如何解决这个问题?

4 个答案:

答案 0 :(得分: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次错误,并且仅在您之后给了所有的投入。因此,这样的事情可能是更好的方法:

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()

答案 1 :(得分:0)

因为您在循环中加入了相同的j列表10次:

Please  note that it is up to the called processes to properly manage parallel access to shared resources.  For example, if

答案 2 :(得分: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))

答案 3 :(得分: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)