如何生成指定范围内的随机数?

4
这是一个与其他一些问题类似的问题,但它们并没有帮助我,所以这次我要具体地问我和我的目的。
我正在编写一个机器人程序,它应该要求用户输入范围内的最大值和最小值,然后在该范围内生成十个随机数。当进行验证时,我被告知randomi都是未使用的变量。我真的不明白为什么会这样。我认为random.randint应该是一个内置函数,至于i,我真的不知道该相信什么。这就是我目前的情况。
def RandomNumbers():
    """
    Asking the user for a min and max, then printing ten random numbers between min and max.
    """
    print("Give me two numbers, a min and a max")
    a = input("Select min. ")
    b = input("Select max. ")


    for i in range(10):
        number = random.randint(a, b)
    print(str(number)+ str(","), end="")

我希望您能给予我一些建议,帮助我完成任务。非常感谢您的帮助!


“验证”是什么意思?i没有被使用,但没关系。当您仅使用for循环进行重复操作且不需要循环变量时,惯例是将其命名为_。我看到您代码中唯一的问题是最后一个print语句应该在for循环内部。 - juanpa.arrivillaga
如果您正在运行Python 3,请使用a = int(input("选择最小值。")),如果您正在使用Python 2,请使用a = int(raw_input("选择最小值。")) - Matthias
3个回答

6

不,random.randint 不是内置函数。你需要 import random 模块来使用该函数。

另外,循环中显然没有使用 i,所以你通常会使用下划线 _ 来代替 i

import random


numbers = []
for _ in range(10):
    numbers.append(random.randint(a, b))

你还会注意到,我使用了一个列表来存储每次迭代的所有值。这样,你就不会丢弃以前迭代的值。
如果你还不熟悉列表,可以查看文档: 数据结构 列表:
列表的项是任意的Python对象。列表是通过在方括号中放置逗号分隔的表达式列表来形成的。

最后需要注意的是,要打印列表中的项目,您可以使用str.join方法,但在将列表中的项目从整数转换为字符串之后才能使用该方法:

output = ', '.join([str(num) for num in numbers])
print(output)

1
你是不是想说 numbers.append(..) - Cajuu'
@Cajuu' 谢谢你的帮助。 - Moses Koledoye
请注意,最后一行可能存在缩进错误,这意味着他会丢弃数字,因为他只想打印它们一次。 - jadsq
我不认为我完全理解为什么循环中没有使用“i”。我以为“i”是数字范围,在最后两个括号内定义的?对于_ in range(10):(因此,在这种情况下,“1”到“10”)。谢谢您解释下划线的用法,我以前从未听说过:)。 - MrBlubbintosh
还有,我想我忘记导入random了,现在你提到它,我才想起来:)。 - MrBlubbintosh
在循环中,您没有使用 i。编辑器会发现这一点,并建议您可以使用标准占位符 _ 代替。如果您使用了 random.randint(a, b) * i,则不会看到该警告。 - Moses Koledoye

3

在你的原始函数中需要提到几个值得注意的点:

  • random 模块不是内置的,你必须显式导入它。
  • input 始终返回字符串,因此您必须将它们转换为整数,然后再将其传递给 random.randint
  • i 确实没有在 for 循环中使用。你可以用 _ 替换它(强调循环是由副作用而不是变量本身引起的,例如打印)。
  • 有关函数名称的风格说明:PEP 8(Python样式指南)鼓励使用小写字母和下划线来分隔单词,而不是驼峰式命名 (random_number vs RandomNumber)。

这里是一个可工作的例子:

import random 

def random_numbers():
    """
    Asking the user for a min and max, then printing ten random numbers between min and max.
    """
    print("Give me two numbers, a min and a max")
    a = int(input("Select min. "))
    b = int(input("Select max. "))

    numbers = [random.randint(a, b) for i in range(10)]
    print(','.join(str(n) for n in numbers))

random_numbers()

非常感谢您提供的完整示例。最后一个“random_numbers()”是做什么用的?它似乎是一个elif,应该在我的主函数中使我的函数工作。 - MrBlubbintosh
另外,“import random”必须放在“def random_numbers():”之前吗?我有多个连续的函数,因此在我的def之前放置import random意味着它是我的函数的最后一行。 - MrBlubbintosh
最后一行只是对random_numbers的有效调用(您可以安全地将其删除)。最佳实践建议将导入语句放在文件顶部。但您也可以将它们放在函数内部(当然要使用相同的缩进)。 - Matt

0

简单)

import random
from random import randrange

print("Give me two numbers, a min and a max")
a = int(input("Select min. "))
b = int(input("Select max. "))
c = 0
while c < 10:
    print(randrange(a, b))
    c += 1

你可以将它放在函数中:

def RandomNumbers():
    import random
    from random import randrange
    
    print("Give me two numbers, a min and a max")
    a = int(input("Select min. "))
    b = int(input("Select max. "))
    c = 0
    while c < 10:
        print(randrange(a, b))
        c += 1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接