我想生成一个随机的4位数字,其中没有任何数字重复。
import random
sets = random.sample(range(0,9), 4)
这会生成一个4位数的随机集,但我希望它是一个整数。我怎么做?
答案 0 :(得分:3)
(假设OP表示所有数字)
不要使用数字而必须操纵str
并返回int
,只需从ascii数字开始:
>>> import string
>>> ''.join(random.sample(string.digits, 4))
'4561'
如有必要,您可以转换为int()
如果第一个数字是0
,则不清楚OP打算做什么。
对于纯数值方法,您可以使用functools.reduce
:
>>> import functools as ft
>>> ft.reduce(lambda s, d: 10*s + d, random.sample(range(10), 4))
2945
答案 1 :(得分:1)
您可以通过将每个数字转换为字符串,连接它们并将它们转换为整数来完成此操作。
Scanner
答案 2 :(得分:1)
如果您需要生成4位数字,仅供知识目的使用。
根据AChampion的建议,此解决方案可以包含重复项
来自随机导入randint 兰丁(1000,9999)
使用bernie Solution生成一个随机的4位数字,其中不会重复任何数字。
int("".join(map(str,random.sample(range(0,9),4))))
答案 3 :(得分:1)
如果您想要具有4个唯一数字的潜在无限数字序列(或任何其他条件 - 编写您自己的数字)
public static XDocument ConvertCsvToXml(string sourcePath)
{
string[] lines;
try
{
lines = File.ReadAllLines(sourcePath);
}
catch (Exception e)
{
System.Diagnostics.Debug.WriteLine(e.Message);
return null;
}
var headers = lines[0].Split(';').Select(x => x.Trim('\"')).ToArray();
var xml = new XElement("FullInvoice", lines.Where((line, index) => index > 0)
.Select(line => new XElement("Line", line.Split(';')
.Select((column, index) => new XElement(headers[index], column)))));
return new XDocument(xml);
}
仅适用于Python 3,因为filter
返回iterator-object(在Python 2.7中返回import random
def numbers_gen(left_end, right_end):
while True:
yield random.randint(left_end, right_end)
def are_digits_unique(number):
number_string = str(number)
return list(set(number_string)) == list(number_string)
four_digits_numbers_gen = number_gen(left_end=1000,
right_end=9999)
four_digits_numbers_with_unique_digits_gen = filter(are_digits_unique,
four_digits_numbers_gen)
,更多返回docs)
答案 4 :(得分:0)
你可以乘以10的幂:
sum(10**a*b for a, b in enumerate(reversed(sets)))
只要sets
的第一个元素不为零,就可以正常工作。
答案 5 :(得分:0)
你可以尝试:
import random
my_set = set()
while len(my_set) < 4:
x = random.choice(range(0,9))
my_set.add(x)
my_num = int("".join(map(str, my_set)))
答案 6 :(得分:0)
一行:
int("".join(random.sample("0123456789",4)))