Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用while循环重复生成随机数的函数_Python_Loops_Random_While Loop_Append - Fatal编程技术网

Python 使用while循环重复生成随机数的函数

Python 使用while循环重复生成随机数的函数,python,loops,random,while-loop,append,Python,Loops,Random,While Loop,Append,我在使用循环重复函数时遇到问题 我不是美国学生,所以请理解我的英语。 我不知道出了什么问题,希望能得到一些帮助。 我知道我可以在函数中附加随机数并返回它 问题是: 有一个骰子有5个面,每面都写着a,b,c,d,e。如果我得到一个d或e,我再次抛出,我记录这个直到我得到一个a,b或c。如果我掷骰子5次,我可以得到:d,e,d,d,a或类似的东西。在我的程序中,我想模拟这个过程。我想要它,这样函数randomnumbers可以生成0~4之间的随机数。我希望主程序通过这个函数循环获取随机数的过程(强制

我在使用
循环重复函数时遇到问题

我不是美国学生,所以请理解我的英语。 我不知道出了什么问题,希望能得到一些帮助。 我知道我可以在函数中附加随机数并返回它

问题是:

有一个骰子有5个面,每面都写着a,b,c,d,e。如果我得到一个d或e,我再次抛出,我记录这个直到我得到一个a,b或c。如果我掷骰子5次,我可以得到:d,e,d,d,a或类似的东西。在我的程序中,我想模拟这个过程。我想要它,这样函数randomnumbers可以生成0~4之间的随机数。我希望主程序通过这个函数循环获取随机数的过程(强制)。然后,我希望主程序检索这些值,并使用它来确定这些数字在骰子上的含义(0=a,1=b,2=c,3=d,4=e),然后将它们附加到一个单独的列表中。最后,我想打印列表中的值,在那里我记录了我得到的值

我必须具体做到以下几点:

  • 函数应该只返回一个随机数,而不是一个列表
  • 主程序应负责制作列表并打印从函数检索到的值

  • 您正在调用函数两次。尝试使用:

    import random
    def randomnumbers():
        r = 0
        r = random.randrange(0,5)
        return r
    
    abc = ["a", "b", "c", "d", "e"]
    
    List = []
    while True:
        rand_number = randomnumbers()
        List.append(abc[rand_number])
        if rand_number <3:
            break
    
    
    for i in List:
        print (i)
    
    随机导入
    def random numbers():
    r=0
    r=随机。随机范围(0,5)
    返回r
    abc=[“a”、“b”、“c”、“d”、“e”]
    列表=[]
    尽管如此:
    随机数=随机数()
    列表。追加(abc[随机编号])
    
    如果rand_number这应该可以做到

    from random import shuffle
    abc = ["a", "b", "c", "d", "e"]
    your_list=[]
    your_list.extend(abc)
    shuffle(your_list)
    print(your_list)
    
    输出:

    ['e', 'd', 'a', 'c', 'b']
    
    如果你想从一个旧列表中得到一个新列表,其中的元素以随机顺序改变

    也就是说,如果你想把abc=['a','b','c']换成say['c','a','b']
    然后以随机方式使用shuffle()

    正如我在评论中提到的,您确实不需要使用
    randomnumbers
    函数来执行此任务。您可以直接调用
    random.randrange
    。但我想这是一个家庭作业,你必须有一个
    randomnumbers
    函数,所以我简化了它

    您还表示希望在随机数大于或等于3时运行
    while
    循环,并且希望列表至少包含一个字母。这意味着您需要在使用随机数从
    abc
    中选择一个字母并将该字母添加到列表中后测试该随机数的值。您可以这样做:

    import random
    
    def randomnumbers():
        return random.randrange(5)
    
    abc = ["a", "b", "c", "d", "e"]
    
    lst = []
    while True:
        r = randomnumbers()
        lst.append(abc[r])
        if r < 3:
            break
    
    for i in lst:
        print(i)
    


    不要在函数中导入random这是什么
    ,而randomnumbers()>=3:
    应该做什么?你的函数randomnumber只返回一个值就我所知,这段代码是正确的。如果无法生成预期结果,请定义预期结果。每次调用
    randomnumbers()
    时,您都会生成一个新的随机数。因此,当你用
    检查你的随机数时,
    ,当你将它添加到你的列表中时,它将是一个完全不同的数字。我解决了这个问题。是的。我试过这个,但有时这个程序没有产生任何价值。正如休在你问题的评论中所写的那样,出现这种情况的可能性非常高。当第一个随机数小于3时就是这种情况。这就是你while循环的逻辑。嗨,我想请你再看一次评论,我刚才又描述了这个问题。对于给您带来的不便,我深表歉意。现在它可以按照您在评论中所描述的那样工作。您好,我不想让列表超过3个字符,但我试图在函数生成大于或等于3ok的数字时停止循环,但在这种情况下,如果列表为空,只需添加一个条件即可重新运行函数,我想请你再看一次评论,我刚才又描述了这个问题。给您带来的不便我深表歉意。是什么让您认为OP想要改变列表?而且,
    your_list=abc
    是毫无意义的:这只是将名称
    your_list
    绑定到与
    abc
    相同的列表对象。查看如果将
    print(abc)
    放在代码末尾会发生什么。你以为它会抄袭名单吗?那是我做过的最愚蠢的事。愚蠢粗心的人。谢谢你指出。有点尴尬。我也不认为OP会把它作为一个解决方案,只是想提到一种不同的方法来得到一个我碰巧知道的解决方案。这就是全部。如果他愿意的话,其他答案都可以让他选择!您好,我想请您再看一次评论,我刚才又描述了这个问题。对于给您带来的不便,我深表歉意。@Korean okay将检查并给出解决方案。在OP完全澄清问题之前发布答案可能会很棘手。但您可以编辑此答案,使其能够回答实际问题。:)您好,我想请您再看一次评论,我刚才又描述了这个问题。对于给您带来的不便,我深表歉意。谢谢。我已经添加了新的信息。@Korean,我已经更新了我的答案。我已经检查了代码,但在某些情况下,我仍然得到a、b或c作为答案。我想弗兰兹正是我所需要的。你应该看看他的答案。我真的很感谢你积极地帮助我。当然,有时你会得到a、b或c的答案。当这种情况发生时,循环停止。这就是你要求的。FWIW,我的代码和弗兰兹的代码基本相同。
    ['e', 'd', 'a', 'c', 'b']
    
    import random
    
    def randomnumbers():
        return random.randrange(5)
    
    abc = ["a", "b", "c", "d", "e"]
    
    lst = []
    while True:
        r = randomnumbers()
        lst.append(abc[r])
        if r < 3:
            break
    
    for i in lst:
        print(i)
    
    lst = []
    while True:
        lst.append(random.choice("abcde"))
        if lst[-1] < "d":
            break