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


#1

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

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

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

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

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


#3

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

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

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


#4

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

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


#5

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


#6

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

import itertools

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

غير repeat إلى 2

ثم غيرها إلى 3

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


#7

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


#8

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