根据特定循环条件生成随机字符

2024-03-29 10:54:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我想继续随机生成一个字符,只要循环条件不满足。我希望我下面的代码能正常工作,但它没有:

import string
import random

def random_characters(number):
    i = 0
    new_string = ''

    while (i < number) :
        new_string = random.choice(string.ascii_lowercase)
        i = i + 1
        return new_string


random_characters(3)

当我运行这段代码时,什么都没有发生,也没有得到任何关于错误的反馈。我可能用错了return new_string,但我无法找出它,即使这正是我所缺少的。在


Tags: 代码importnumbernewstringreturndefascii
2条回答

两个原因:

  • 放弃创建的字符(通过重新指定为相同的名称)
  • 您只返回第一个字符(通过在循环内部返回)

相反,请考虑:

import string
import random

def random_characters(number):
    i = 0
    random_chars = []

    while (i < number) :
        random_chars.append(random.choice(string.ascii_lowercase))  # Store the char you generate
        i = i + 1

    return ''.join(random_chars)  # Return once you have all the characters

当然,这不是最Python式的方法。这里有一种方法不会在人工条件下循环:

^{pr2}$

注意:这称为generator expression

首先,您的return在循环内,因此您永远不会循环多次。把它改成

def random_characters(number):
    i = 0
    new_string = ''

    while (i < number) :
        new_string = random.choice(string.ascii_lowercase)
        i = i + 1
    return new_string # <<< Dedent

random_characters(3)
#>>> 'c'

然后您需要实际构建new_string,而不是每次都设置它。构建一个list,然后"".join它:

^{pr2}$

那么您应该使用for i in range(number)而不是while循环:

def random_characters(number):
    letters = []

    for i in range(number): # <<< Deals with i for you.
        letters.append(random.choice(string.ascii_lowercase))

    return "".join(letters)

random_characters(3)
#>>> 'xay'

你可以用一个简短的版本来理解列表:

def random_characters(number):
    # MAGIC!
    letters = [random.choice(string.ascii_lowercase) for i in range(number)]

    return "".join(letters) # <<< Join the letters into one string

random_characters(3)
#>>> 'yby'

如果你想运行这个,你有几个选择。您可以在交互式解释器中运行:

%~> python -i random_characters.py
>>> random_characters(3)
'zgp'

或者您可以告诉它print文件内的结果:

print(random_characters(3))  # Python 3
print random_characters(3)   # Python 2

相关问题 更多 >