İstediğiniz çıktıya göre bir karakter tekrar tekrar kullanılabilir.
10 haneli bir karakter elde etmek istiyorsunuz.
Her bir hane için 58 karakterden birini seçebilirsiniz.
Yani toplamda 58 ** 10 = 430804206899405824 adet 10 haneli karakterler elde edebilirsiniz. Bu sayı (430 katrilyon) büyük bir sayıdır.
Burada bahsettiğiniz ile ilgili biraz daha bilgi verebilir misiniz?
bu 3 karakterde olabilir 2 karakterde 10 karakterde burda boyuttan ziyade nasıl bir kod ile satır satır yazdırılabilir
123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz
yukardaki karakterlerle örneğin 3 karakterlik üretilebilecek tüm keyleri bir dosyaya satır satır yazdırmak amaç bunu random yapıyoruz ama bana sorulan oluşabilecek tüm keyler
111
112
113
114
aaa
aab
aac
şeklinde oluşabilecek tüm çıktının bir txt dosyasına yazdırılması amaç
Yapmak istediğiniz işlem uzun sürer ama madem kod görmek istiyorsunuz aşağıdaki kodları bir inceleyin:
1. yöntem: random modülü ile
import random
def f(string, n):
with open(f"{n}.txt", "w", encoding="utf-8") as f:
ihtimaller = []
say = 0
while say != len(string) ** n:
ihtimal = ""
for i in range(n):
ihtimal += random.choice(string)
if ihtimal not in ihtimaller:
ihtimaller.append(ihtimal)
f.write(f"{ihtimal}\n")
f.flush()
say += 1
string = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"
f(string, 3)
2. yöntem: İç içe for döngüsü ile:
def f(string, n):
with open(f"{n}.txt", "w", encoding="utf-8") as f:
for i in string:
for j in string:
for k in string:
f.write(f"{i}{j}{k}\n")
f.flush()
string = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"
f(string, 3)
Hane sayısını 3’ten 4’e çıkarırsanız, işlem daha da uzayacaktır.
Eğer kullanılan bir karakter bir daha kullanılmayacaksa, permütasyon kullanırsınız.
from itertools import permutations
string = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"
with open("3.txt", "w", encoding="utf-8") as f:
for i in permutations(string, 3):
f.write(f"{''.join(i)}\n")
f.flush()
Böyle hesaplamaları seviyorum.
İsterseniz sıfırdan hesaplamaya başlayalım.
Arkadaş elindeki 58 adet elemanı olan bir string verisi ile 10 haneli aşağıdaki gibi karakter dizileri oluşturmak istiyordu.
1111111111
1111111112
Her bir 10 haneli karakter 10 bayt yapar (Ascii karakterleri için). Bir de sonuna "\n" kaçış dizisini ekledik mi 1 bayt da buradan, yani her bir satır için 11 bayt yer gerekir.
Her bir hane için 58 karakterin hepsi yazılabilir mi? Evet.
O halde 58 ** 10 = 430804206899405824. Yani 430804206899405824 adet satır demek bu.
Her bir satır 11 bayt yer tutacaktı, o halde 11 * 430804206899405824 = 4738846275893464064 baytlık yere ihtiyacımız var. Bu da sizin dediğiniz gibi 4.7388462758934641883 exabyte yapar.
Yani dediğiniz gibi arkadaş bu işlemi yapabilmek için yeni bir hard disk almak zorunda.