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