【问题标题】:How to find a random number between 2 numbers如何在两个数字之间找到一个随机数
【发布时间】:2021-06-21 03:07:28
【问题描述】:

我正在制作一个程序,它要求 2 个随机数并在已要求的 2 个数字之间打印一个随机整数。我的代码有效,除了我给出 2 个连续数字的时候,它不会打印小数/浮点数。

import random

def bound():
    print("Give me a number")
    s = input()
    print("Give me another number")
    x = input()
    w = random.randint(int(s),int(x))
    if w == s:
        None
    if w == x:
        None
    else:
        print(w)
bound()

【问题讨论】:

  • 这是一个randint,意思是random integer
  • 如果你想获得随机浮点数,你应该使用:random.uniform(int(s),int(x)) 而不是random.randint()
  • if w == s: None 的废话是什么?如果您不希望这两个数字包含在随机范围内,则需要更改范围。你现在所拥有的毫无意义。现在,您的函数不会返回任何内容。
  • 真的,您的规范不清楚,这是造成混乱的主要原因。您说“在两个数字之间打印一个随机整数”。如果你想要一个随机整数,那么你为什么会期望一个浮点数?如果您想要两个数字之间的数字但不包括端点,那么 2 和 3 之间没有整数。您需要先澄清问题,然后我们才能给您合理的答案。

标签: python random


【解决方案1】:

你离得太近了!只需将randint 替换为uniform

def bound():
    print("Give me a number")
    s = input()
    print("Give me another number")
    x = input()
    w = random.uniform(int(s),int(x))
    if w == s:
        None
    if w == x:
        None
    else:
        print(w)
bound()

randint 返回一个整数,而uniform 从传递的数字之间返回一个随机浮点数。

【讨论】:

  • 条件 w==s 和 w==x 永远不会满足,因为 w 是浮点数,x 和 s 是字符串。此外,None 本身没有意义。
【解决方案2】:

randint 生成整数值,获取十进制值可以使用uniform

试试这个

def bound():
    print("Give me a number")
    s = input()
    print("Give me another number")
    x = input()
    if int(s)+1 == int(x):                 # check for continuity
        w = random.uniform(int(s),int(x))
    else:
        w = random.randint(int(s),int(x))
    if w == s:
        None
    if w == x:
        None
    else:
        print(w)
bound()

如果数字不连续,这将返回一个整数值,如果它们是连续的,则返回一个浮点值。

【讨论】:

    【解决方案3】:

    您可以将random.uniform 用于2 个连续的数字,而将random.randint 用于非连续的数字。 randint 基本上是 random integerrandominteger。它基本上从给定的范围中获取整数。

    def bound():
        print("Give me a number")
        s = input()
        print("Give me another number")
        x = input()
        w = random.uniform(int(s),int(x))
        print(w)
        
    bound()
    

    【讨论】:

    • 这真的没有意义,不是吗?你要么想要一个整数,要么想要一个浮点数。我知道发帖人没有具体说明,但我不确定这个答案是否真的有帮助。
    【解决方案4】:

    您的规格不清楚。在我看来,如果我说“选择一个介于 1 和 4 之间的数字”,那么可能的答案是 1、2、3 或 4。在这种情况下:

    def bound():
        x = int(input("Enter lower bound:"))
        y = int(input("Enter upper bound:"))
        return random.randint(x,y)
    

    如果您想要一个介于 1 和 4 之间的实数(其中 2.773 是有效答案),那么您想要:

    def bound():
        x = int(input("Enter lower bound:"))
        y = int(input("Enter upper bound:"))
        return random.uniform(x,y)
    

    如果你想要两个端点之间的整数但不包括两个端点,这看起来很傻,那么你想要:

    def bound():
        x = int(input("Enter lower bound:"))
        y = int(input("Enter upper bound:"))
        if abs(y-x) <= 1:
            print("There are no integers between",x,"and",y)
            return None
        else:
            return random.randint(x+1,y-1)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-19
      • 2011-04-27
      • 2012-04-25
      • 2014-12-19
      • 1970-01-01
      • 2021-10-13
      • 2014-03-20
      • 2014-10-02
      相关资源
      最近更新 更多