Python 3:如何获取随机的4位数字?

时间:2018-07-09 17:58:20

标签: python python-3.x

我需要帮助来获得一个随机的4位长数字,而该数字内没有重复的数字,所以我有

<template>
  <v-app id="inspire">
    <v-content>
      <v-container fluid fill-height>
        <v-layout align-center justify-center>
          <v-flex xs12 sm8 md4>
            <v-card class="elevation-12">
              <v-toolbar dark color="primary">
                <v-toolbar-title>Login form</v-toolbar-title>
                <v-spacer></v-spacer>
                <v-tooltip bottom>
                  <v-btn
                    slot="activator"
                    :href="source"
                    icon
                    large
                    target="_blank"
                  >
                    <v-icon large>code</v-icon>
                  </v-btn>
                  <span>Source</span>
                </v-tooltip>
                <v-tooltip right>
                  <v-btn slot="activator" icon large href="https://codepen.io/johnjleider/pen/wyYVVj" target="_blank">
                    <v-icon large>mdi-codepen</v-icon>
                  </v-btn>
                  <span>Codepen</span>
                </v-tooltip>
              </v-toolbar>
              <v-card-text>
                <v-form>
                  <v-text-field prepend-icon="person" v-model="login.email" name="email" label="Email" type="text" required></v-text-field>
                  <v-text-field id="password" v-model="login.password" prepend-icon="lock" name="password" label="Password" type="password" required></v-text-field>
                </v-form>
              </v-card-text>
              <v-card-actions>
                <v-spacer></v-spacer>
                <v-btn color="primary" @click='sendCredentials'>Login</v-btn>
              </v-card-actions>
            </v-card>
          </v-flex>
        </v-layout>
      </v-container>
    </v-content>
  </v-app>
</template>

<script>
  export default {
      data: function () {
        return {
          login:{
            email:"",
            password:""
          }
        }  
      },
    props: {
      source: String
    },
    methods: {
      sendCredentials: function () {  
        axios.post('/login', this.login)
        .then((response)  =>  {

          console.log(response)
          this.$router.go('/');

        })
        .catch(error => {
            console.log(error)
        });
      }
    }
  }
</script>

这将是最好的方法吗? 我还需要确保第一个数字不为0的帮助,该怎么办?为输入喝彩

6 个答案:

答案 0 :(得分:2)

如果要扩展解决方案以确保前导数字不为0,则可能没有超级简洁的写法;只是明确一点:

first = random.choice(range(1, 10))
leftover = set(range(10)) - {first}
rest = random.sample(leftover, 3)
digits = [first] + rest

请注意,我利用sample采用序列或集合这一事实。在旧版本的Python中,它需要一个序列。根据{{​​3}},其中包括2.7,但无论如何CPython和PyPy 2.7都采用一组。无论如何,如果这是一个问题,则可以执行leftover = [val for val in range(10) if val != first]


如果性能很重要,还要考虑另一件事。像the 2.7 docs这样的不确定性解决方案显然具有无限的最坏情况时间,但是在几乎每种情况下它都可能明显更快。您有90%的机会会在第一时间得到答案,而在前十个循环中有99.9999999%的机会,并且对sample的单次调用比多次调用快大约一个数量级是合理的设置操作等。

答案 1 :(得分:0)

如果您允许第一个数字为零(例如0123而不是123),那么您需要将结果作为字符串。为此,我建议random.sample(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'], 4)。或者,random.sample([str(x) for x in range(10)], 4)

否则,阿巴纳特的答案就起作用了。

答案 2 :(得分:0)

以下代码可以完成这项工作:

/info

答案 3 :(得分:-1)

random.sample()确保没有重复的数字,但是第一个数字可以为零,因此在这种情况下可以重新随机化

while True:
    number = ''.join(str(x) for x in random.sample(range(10), 4))
    if not number.startswith('0'):
        break

答案 4 :(得分:-1)

使用permutations中的itertools

from random import choice
from itertools import permutations

while True:
    v = choice(list(permutations('0123456789', 4)))
    if v[0] != '0':
        break
print(''.join(v))

示例输出:

3597

编辑:permutations,否product

答案 5 :(得分:-3)

您应该首先在python IDE上导入随机库。

import random
a = random.randint(1000,9999)
print(a)