لنتيجة المفروض تكون
a
b
c
aa
ab
ac
ba
bb
bc
ca
cb
cc
aaa
aab
aac
aba
abb
abc
aca
acb
acc
baa
bab
bac
bba
bbb
bbc
bca
bcb
bcc
caa
cab
cac
cba
cbb
cbc
cca
ccb
ccc
هل يوجد أن يكون الناتج بنفس الترتيب ؟
وأيضاً هل المدخل بأي حجم أم فقط ثلاثة حروف ؟
لو الإجابة نعم للسؤالين بالأعلى, الموضوع سهل صديقي عثمان, فقط أول مرة تجعل الـ depth في الـ loop يساوي واحد يعني فقط
for x in my_list:
print(x)
هكذا تطبع أول ناتج (حرف واحد) يعني فقط a b c
بعدها تجعل الـ depth يساوي اثنان:
for x in my_list:
for y in my_list:
print(x + y)
هكذا تطبع حرفين مع بعض
المرة الثالثة كيف ستقوم بها ؟
بعد طول انتظار اجابتكم تمكنت من الوصول الى هدا الحل لذلك هل هو صحيح كليا ام لا
import itertools
text = "abc"
x = len(text)
les = itertools.product(text, repeat= x)
for s in text:
print(s)
for o in text:
for z in text:
print (o + z)
for i in les:
print (''.join(i))
نعم على الناتج ان يكون بنفس الترتيب يقبل اي عدد من الحروف
حل جميل ولكن ما يزال ليس كامل, جرب جعل الكلمة abcd وستلاحظ أن الثلاثة الحروف لن تظهر بشكل سليم
بما أن عدد الحروف غير ثابت… أغلب الظن ستستعمل فقط one nested loop
هل يمكنك التعديل على كودي ليصبح بعمل بالطريقة المطلوبة ذلك هو آخر حد وصلت اليه
الأمر سهل جداً يا عثمان, أنت قريب جداً من الحل… لاحظ هذا:
import itertools
text = 'abc'
cartesian_product = itertools.product(text, repeat = 1)
print(list(cartesian_product))
غير repeat إلى 2
ثم غيرها إلى 3
ولاحظ الفرق… ثم قرر بعدها مالذي يتوجب فعله للتعامل مع أي طول نص
ما زلت أنتظر حلك يا عثمان
للاسف لدي عدة امور اقوم بها الان لذلك قد اتأخر لأكتر من اربعة أيام حتى افكر بالحل