اريد تفادي التكرار بالاضافة الى امكانية ادخال اي عدد من الحروف وشكرا لكم مسبقا

لنتيجة المفروض تكون
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

2 Likes

هل يوجد أن يكون الناتج بنفس الترتيب ؟
وأيضاً هل المدخل بأي حجم أم فقط ثلاثة حروف ؟

لو الإجابة نعم للسؤالين بالأعلى, الموضوع سهل صديقي عثمان, فقط أول مرة تجعل الـ 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)

هكذا تطبع حرفين مع بعض

المرة الثالثة كيف ستقوم بها ؟

1 Like

بعد طول انتظار اجابتكم تمكنت من الوصول الى هدا الحل لذلك هل هو صحيح كليا ام لا

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))

نعم على الناتج ان يكون بنفس الترتيب يقبل اي عدد من الحروف

2 Likes

حل جميل ولكن ما يزال ليس كامل, جرب جعل الكلمة abcd وستلاحظ أن الثلاثة الحروف لن تظهر بشكل سليم

بما أن عدد الحروف غير ثابت… أغلب الظن ستستعمل فقط one nested loop

هل يمكنك التعديل على كودي ليصبح بعمل بالطريقة المطلوبة ذلك هو آخر حد وصلت اليه

1 Like

الأمر سهل جداً يا عثمان, أنت قريب جداً من الحل… لاحظ هذا:

import itertools

text = 'abc'
cartesian_product = itertools.product(text, repeat = 1)
print(list(cartesian_product))

غير repeat إلى 2

ثم غيرها إلى 3

ولاحظ الفرق… ثم قرر بعدها مالذي يتوجب فعله للتعامل مع أي طول نص :wink:

1 Like

ما زلت أنتظر حلك يا عثمان :roll_eyes:

:sweat_smile::sweat_smile::no_mouth:
للاسف لدي عدة امور اقوم بها الان لذلك قد اتأخر لأكتر من اربعة أيام حتى افكر بالحل

1 Like