我需要帮助来获得一个随机的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的帮助,该怎么办?为输入喝彩
答案 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)