有没有可能生成介于1000000和9999999之间的易于记忆的随机数?
我知道“易于记忆”这个术语是相对的,但我相信对于普通人来说,数字331332比537106更容易记住(或者不是这样吗?)
用例。我正在为应用程序中的人生成唯一的数字,并考虑通过分配“易于记忆的数字”来使其更容易。 我的玩法是,首先注册的人获得易于记忆的数字,从那里开始易于度逐渐降低。
如果您在任何编程语言中看到过类似的内容,可以发布以供其他人参考。
这里有一个类似的问题, 但那是六年前的字母数字混合。
有没有可能生成介于1000000和9999999之间的易于记忆的随机数?
我知道“易于记忆”这个术语是相对的,但我相信对于普通人来说,数字331332比537106更容易记住(或者不是这样吗?)
用例。我正在为应用程序中的人生成唯一的数字,并考虑通过分配“易于记忆的数字”来使其更容易。 我的玩法是,首先注册的人获得易于记忆的数字,从那里开始易于度逐渐降低。
如果您在任何编程语言中看到过类似的内容,可以发布以供其他人参考。
这里有一个类似的问题, 但那是六年前的字母数字混合。
我找到了一些使数字易记的方法:
http://www.slideshare.net/cntryrckr69/what-makes-a-number-memorable我用Python实现了其中的几个方法。
下面是代码示例:
import random
def easynum(num):
num = str(num)
if len(set(num)) <= 2: # common characters eg. 1114111
print("common")
return True
if num == num[::-1]: # its the same backwards eg. 1234321
print("reversible")
return True
if all(x <= y for x, y in zip(list(num), list(num)[1:])): # increasing, e.g. 123456789
print("increasing")
return True
if all(x >= y for x, y in zip(list(num), list(num)[1:])): # decreasing
print("decreasing")
return True
for count in range(10):
rand = random.randint(1000000, 9999999)
while easynum(rand) == None:
rand = random.randint(1000000, 9999999)
print(rand)
我获得的输出如下:
reversible
5691965
reversible
9585859
increasing
1112557
reversible
9057509
reversible
3831383
decreasing
8322000
increasing
1122356
common
4884484
decreasing
9887320
common
4004040
我可以想到几个易于记忆的模式:
1234321 (half reversed)
1234567 (in order)
1231231 (repeating)
7654321 (reverse order)
2468024 (even in order)
1357135 (odd in order)
1212121 (alternating)
显然你能想到更多的方法。拥有一个不同的模式库。从库中随机选择一个模式,然后在模式的限制范围内随机填充该模式。例如,在“按顺序”模式下,您只能选择起始数字,其余数字将取决于起始数字。
一种简单的方法是随机重复0-9数字不同次数,从而使一些数字比其他数字更容易出现。
import random
DIGITS = list(range(10))
def generate_easy_number(length=6):
multiplier = list(range(10))
random.shuffle(multiplier)
repeated_dig = list()
for i, n in enumerate(DIGITS):
for _ in range(multiplier[i]):
repeated_dig.append(n)
random.shuffle(repeated_dig)
return ''.join([str(x) for x in repeated_dig[:length]])
print(generate_easy_number())
准备一个0-10的数字列表,创建另一个名为multiplier
的列表并进行随机化,然后使用其值来指示每个数字应重复的次数(或权重)。
创建最终的重复数字列表,对其进行随机化并进行切片。
随机结果:
404092
090417
002657
840818
130610
065644
495060