英文:
Python print random lines without repetitions
问题
我有一个小的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'))
英文:
I have a little python program which print random HEX string, it generates one HEX string each time I run the program.
i want the program to only generate a HEX string one's, that means the program should not generate a string that has already generated been generated.
EXAMPLE
python3 program.py
1. ab6b
2. 4c56
3. 1b13
4. ae8d
The next example show that the output is random and the program repeats lines.
1b13
ae8d
4c56
ae8d
My Code
import os
import binascii
print(binascii.hexlify(os.urandom(2)).decode('utf-8'))
答案1
得分: 5
我们可以存储所有先前生成的字符串,并检查任何新字符串是否与此列表相符,但在大量运行后,您可能会耗尽唯一的字符串。
import os
import binascii
已生成的十六进制集合 = set()
while True:
新的十六进制 = binascii.hexlify(os.urandom(2)).decode('utf-8')
if 新的十六进制 not in 已生成的十六进制集合:
print(新的十六进制)
已生成的十六进制集合.add(新的十六进制)
英文:
We could store all previously generated strings and check any new string against this list, but you might run out of unique strings after a large number of runs.
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)
答案2
得分: 1
为了这种情况,您需要将代码存储在某个地方,例如在Python中的一个列表中。
接下来,需要检查新代码是否存在于此列表中。
您可以根据需要调整以下代码。
import os
import binascii
list_codes = []
num = 1
while num == 1:
hex_code = binascii.hexlify(os.urandom(2)).decode('utf-8')
if hex_code not in list_codes:
list_codes.append(hex_code)
print(hex_code)
num = int(input("Press 1 to continue "))
(Note: I've made a slight modification to the variable name 'hex' to 'hex_code' to avoid potential conflicts with the 'hex' built-in function in Python.)
英文:
For this situation, you need to store the codes in someplace, like a list in Python.
After this, is necessary to check if the new code exists in this list.
You can adapt the following code as you need.
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 "))
答案3
得分: 0
以下是翻译好的内容:
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) # 将新值写入文件
英文:
You need to save the values you print and before printing the next value, check if it's been printed before.
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)
In order to have the computer remember what was printed from a previous run, you need to have another file going which saves the values you print. In the code below, the file is 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)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论