Python不重复地打印随机行

sczxawaw  于 2023-06-25  发布在  Python
关注(0)|答案(3)|浏览(119)

我有一个小的python程序,打印随机十六进制字符串,它生成一个十六进制字符串每次我运行该程序。我希望程序只生成一个十六进制字符串一的,这意味着该程序不应该生成一个字符串,已经产生了。

示例

python3 program.py

1. ab6b

2. 4c56

3. 1b13

4. ae8d

下一个例子显示输出是随机的,程序重复行。

1b13

ae8d

4c56

ae8d

我的密码

import os
import binascii

print(binascii.hexlify(os.urandom(2)).decode('utf-8'))
0x6upsns

0x6upsns1#

我们可以存储所有以前生成的字符串,并根据该列表检查任何新字符串,但是在大量运行之后,您可能会用完唯一字符串。

import os
import binascii

generated_hexes = set()

while True:
    new_hex = binascii.hexlify(os.urandom(2)).decode('utf-8')
    if new_hex not in generated_hexes:
        print(new_hex)
        generated_hexes.add(new_hex)
tnkciper

tnkciper2#

对于这种情况,您需要将代码存储在某个地方,例如Python中的列表。
在此之后,有必要检查新代码是否存在于此列表中。
您可以根据需要修改以下代码。

import os
import binascii

list_codes = []

num = 1

while num == 1:
    hex = binascii.hexlify(os.urandom(2)).decode('utf-8')
    if hex not in list_codes:
      list_codes.append(hex)
      print(hex)
    num = int(input("Press 1 to continue "))
yvt65v4c

yvt65v4c3#

您需要保存您打印的值,并在打印下一个值之前检查它是否已经打印过。

import os
import binascii

previously_printed = []
def print_new_random_hex():
    random_hex = binascii.hexlify(os.urandom(2)).decode('utf-8')
    while random_hex in previously_printed:
        random_hex = binascii.hexlify(os.urandom(2)).decode('utf-8')
    print(random_hex)
    previously_printed.append(random_hex)

为了让计算机记住上一次运行时打印的内容,您需要另一个文件来保存您打印的值。在下面的代码中,文件是previously_printed.txt

import os
import binascii

with open('previously_printed.txt', 'r') as file:
    previously_printed = file.read().split('\n')

with open('previously_printed.txt', 'a') as file:
    random_hex = binascii.hexlify(os.urandom(2)).decode('utf-8')
    while random_hex in previously_printed:
        print("yay we avoided printing", random_hex, "a second time!")
        random_hex = binascii.hexlify(os.urandom(2)).decode('utf-8')

    print(random_hex)
    file.write('\n' + random_hex)

相关问题