制作6个不同的随机数

时间:2017-05-26 17:44:32

标签: python random numbers non-repetitive

我现在不擅长编码,我正在努力改进和学习。 ATM我试图写一个随机选择6个非重复数字的代码,但我失败了。我该怎么办?

import random

a = random.randint(1, 100)
b = random.randint(1, 100)
c = random.randint(1, 100)
x = random.randint(1, 100)
y = random.randint(1, 100)
z = random.randint(1, 100)

outa = b, c, x, y, z
outb = a, c, x, y, z
outc = a, b, x, y, z
outx = a, b, c, y, z
outy = a, b, c, x, z
outz = a, b, c, x, y

all = a, b, c, x, y, z

while a in outa or b in outb or c in outc or x in outx or y in outy or z in outz:
    if a in outa:
        a = random.randint(1,100)
    elif b in outb:
        b = random.randint(1,100)
    elif c in outc:
        c = random.randint(1,100)
    elif x in outx:
        x = random.randint(1,100)
    elif y in outy:
        y = random.randint(1,100)
    elif z in outz:
        z = random.randint(1,100)

print(all)

4 个答案:

答案 0 :(得分:1)

random中有一个功能就是:

all = random.sample(range(1,101), 6)

如果可能的值列表太大而无法构建,那么您的算法很好,但更好的是列表:

all = []
while len(all) < 6:
    x = random.randint(1, 10000000)
    if not x in all:
        all.append(x)

如果您的列表比6大得多,则可以考虑使用set代替list

更新:实际上,random.sample()非常聪明,使用python3这段代码:

all = random.sample(range(1,10000000001), 6)

工作得很好,而这一个:

all = random.sample(list(range(1,10000000001)), 6)

吃掉了我的所有记忆。

如果您使用的是python2,则可以使用xrange代替range来获得相同的效果。

答案 1 :(得分:0)

像这样:

<nav>
                <div id="top" class="row">
                    <a href="index.html"><img src="resources/css/img/brand2.png" class="logo"></a>
                    <ul class="main-nav js--main-nav">
                        <li><a id="workout" href="theworkout.html">The Workout</a></li>
                        <li><a href="motivators.html">Trainers</a></li>
                        <li class="dropdown"><a class="dropdown-toggle" data-toggle="dropdown" href="#">About<span class="caret"></span></a>
                            <ul class="dropdown-menu">
                                <li><a href="thelevels.html">The Levels</a></li>
                                <li><a href="sixpunches.html">Learn the Moves</a></li>
                                <li><a href="philosophy.html">Philosophy</a></li>
                                <li><a href="faq.html">FAQ</a></li>
                                <li><a href="press.html">Press</a></li>
                                <li><a href="privateevents.html">Private Events</a></li>
                            </ul>
                        </li>
                        <li><a href="contact.html">Contact</a></li>
                        <li><a href="buyclasses.html">Buy Classes</a></li>
                        <li><a href="schedule.html">Schedule</a></li>
                        <li><a href="#" class="accountButton">My Account</a></li>

                    </ul>
                    <a class="mobile-nav-icon js--nav-icon"><i class="ion-navicon-round"></i></a>
                </div>
            </nav>

答案 2 :(得分:0)

您可以创建一个使用random.sample生成6个唯一数字的列表,而不是创建6个不同的变量:

import random

nums = random.sample(range(1,100), 6)
print (nums)

Output:
[2,34,5,61,99,3]

答案 3 :(得分:0)

all = a, b, c, x, y, z

这样的事情创造了的元组。因此,在行执行时,该元组内部具有固定值,无法更改。当您更新最初用于构造它的变量之一时,它尤其不会更改。因此,您无法使用all作为最终结果,或outX元组检查是否有重复项,因为它们已修复且无法更新。

为了使您的代码能够工作,您必须在while循环的每次迭代中重新创建所有这些元组。但总的来说,你会很快注意到拥有那些显式变量并不是一个好主意。

如果您想继续使用randint,那么您可以一次生成一个数字,并在遇到您已有的数字时“重新注册”:

numbers = []
while len(numbers) < 6:
    num = random.randint(1, 100)
    if num not in numbers:
        numbers.append(num)

我在这里使用一个列表,这是一个可变数据结构来收集多个值(与元组相比,它是不可变的)。

你也可以在这里使用random.sample,它可以更方便地从一系列数字中获取任意数量的唯一值:

numbers = random.sample(range(1, 100), 6)