الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تمرين بسيط(palindromise number)

بدأه kenham في 19 مايو 2014 · 32 رد · 2,931 مشاهدة · في لغة Python
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

ال palindrom هو كلمة أم عدد تقرأ من اليمين أو لليسار أو من اليسار لليمين فتبقى نفس القراءة

 

مثلا: Dewed   mom

و 121  32123

 

المطلوب في هذا التمرين هو صنع برنامج بالبايثون

 

تعطيه عددا فيعطيك أقرب palindrome لهذا العدد بحث يكون الباليدروم الناتج إما أصغر أو يساوي العدد المدخل

 

هذا التمرين منقول من موقع إختبار القدرات  http://www.spoj.com/

 

في إنتظار مشاركاتكم

1
#2

ما هذا الموضوع مطروح منذ أسبوع ولا محاولة واحدة على الأقل

 

لا يهم أن تعرف على الأقل ناقش معي

 

في انتضار تفاعلكم

#3

انا بصراحة تعجبني الألغاز ...

لكنني مبتدئ جدا وسأحاول قدر الامكان .. إن شاء الله اتوصل للحل

شكرا لك

#4

في انتضار مشاركتك

#5

ممكن توضيح اكثر

مثلا لو ادخلت هذا الرقم 12345 فما المفترض ان يكون الناتج؟

#6

هذه مشاراكتي (انا مبتدئ جدا :( )

#!/usr/bin/env pythondef check(word):    i = 0    no = 0    while i < len(word):        if word == word[-i-1]:            pass        else:            no += 1            i += 1            if no != 0:        return False        return True##################################word = input('Enter any word: ')if check(word.lower()):    print('Yes')else:    print('No')
1
#7

بصراحة  انا  لست  مبرمج  بايثون  جيد 

 

لكن  ما  اعرفه  ان  ما  نحتاجه  هنا  هو  قراءة  مدخلات  بالترتيب   عن  طريق  الدالة  splite   !!!!

 

ثم  نخزن  القيمة   في  مصفوفة  بعدها  نستطيع  طباعة  الاعداد   قبل  آخر  عنصر  في  المصفوفة  لكن  بعكس  الترتيب

 

يعني  مثلا  لو  ادخلنا    123    يكون  الناتج       12321   

 

ارجوا  ان  يكو ن  كلامي  صحيح  

للإطلاع  على جديد  الكتب من تأليفي


 


الطريق لاحتراف تطوير المواقع   ج1 | ج2 | ج3 | ج4


 


                    4Colors | Break Out | Classic Snake | لعبة السودوكو - 2014  |  لعبة  XO                      


 


Help Dodo


 


^_^


 

#8

الأخ   m ahmed    عمل جيد كمبتدأ البرنامج الذي صنعته يعمل لكنه يحتاج لتطوير

 

أولا أستطيع أن أصنع برنامج يماثل عمل برنامجك من دون استعمال النكرارات  و ست أسطر برمجية فقط

 

ثانيا أنت صنعت برنامج يقوم باخبارنا إذا كان النص المدخل palindrome و أنا قلت برنامج يطبع أقرب palindrom للعدد المدخل (إن كان العدد palindrome يطبعه و إلا يجد أقرب palindrome له =< العدد المدخل)

 

بداية حاول تطوير برنامجك،قم بحذف التعليمات التي لا فائدة منها أو بتجنبها

 

مثلا  يمكننا إستعمال الأمر break مكان n+=1  فلا نحتاج أن نواصل العمل فقذ تبين عندها أن النص المدخل ليس palindrom

و أنت تقارن مقارنة مزدوجة يعني من ال0 لل len(word)

 

كان عليك أن تقارن النصف فقط

 

سأنتضرك ماولاتك لتكوير يرنامج سأساعدك حتي تكنبة مثلي في ست أسكر من دون تكرارات

 

و عندها ستكون مستعدا لصنع البرنامج المطلوب

 

بالنسبة للأخ   AGASHE   أقر palindrom ل 123 هو 222 و ليس 12321 هذا يعيد جدا

 

المشكلة ليست في أنك مبتدأ بالبايثون المشكلة أنك لم تفهم المطلةب بغد راجع سؤالي و ابحث في النت و ستجد ضالتك

 

و إن أردت الحل بأي لغة أخرى أوجد الحل و راسلني على الخاص أو يمكنك نقل التمرين في قسم اللغة التي تجيدها لكن لايمكننا مناقسة لغات أخرى هنا

#9

جزاك الله خير
مساعدك وتوضيحاتك زادتني حماس
أشكرك جدا

عندي ملاحظة بسيطة اليس اقرب palindrome للعد 123 هو 121 وليس 222 !\

#10
اقتباس

 

عندي ملاحظة بسيطة اليس اقرب palindrome للعد 123 هو 121 وليس 222 !\

 

أخي الكريم أنا قلت أقرب palindrom >=العدد

 

الpalindrome  الناتج لا يجوز أن يكون أصغر من العدد إما يساويه أو أقرب palindrom أكبر منه

 

لذا الpalindrome الأّقرب ل 123 هو 222

 

معذرة أنا لم أرى سؤالك عن 12345

 

الجواب هو: 13331

 

أرجو أن تكون قد لا حضت القانون

 

إكتشاف القانون هو الأساس عليك التفكير فيه قبل الشروع في صناعة البرنامج

أدخل على الرابط الموجود تحت بالتوفيع الخاص بي

 

ستجد برنامج الأرقام المتقاطعة و مدونتي الخاصة

 

أرجو أن تستفيد

#11

مشكلتي  اني  فكرت  في  ايجاد  شكل  من  الارقام    :P   و  ليس  قانون  رياضي   !!!

 

فبالرغم  من  انك  كتبت   ان  الناتج  لابد  ان  يكون  اصغر  او  يساوي    انا    اوجدته   اكبر  بكثير   :haha: هذه  عاقبة   العجلة 

    

يبدو  ان  الموضوع  يحتاج  لتفكير  :huh:

للإطلاع  على جديد  الكتب من تأليفي


 


الطريق لاحتراف تطوير المواقع   ج1 | ج2 | ج3 | ج4


 


                    4Colors | Break Out | Classic Snake | لعبة السودوكو - 2014  |  لعبة  XO                      


 


Help Dodo


 


^_^


 

#12
اقتباس

 

فبالرغم  من  انك  كتبت   ان  الناتج  لابد  ان  يكون  اصغر  او  يساوي    انا    اوجدته   اكبر  بكثير   :haha: هذه  عاقبة   العجلة

أنت لا تزال مستعجل

 

أكبر أو يساوي وليس أقل أو يساوي

 

;)

#13

هل هذا صحيح؟

#!/usr/bin/env pythondef isEven(n):    if len(n) %2 == 0:        return True    return Falsedef rounding(a):    i = 0    n = []    while i < len(a):        if (a == a[-i-1]):            pass        else:            n.append(a)        i += 1         if len(n) > 0:        j = 0        while j < len(n):            x = max(n[j], n[-j -1])            n[j] = x            j += 1        return n        a = input('value: ')if isEven(a):    print(''.join(rounding(a)))else:    i = len(a) // 2 # Median Value    u = []    for z in a:        u.append(z)    c = u    del(u)    a = u    a = rounding(a)    a.insert(i, c)    print(''.join(a))# END
#14

برنامجك لا يعمل

 

أخي أما لما قلت أت المدخلات أرقام قصدت التسهبل

 

حاول صنعه بالأرقام و متي تفعل ذلك حالو بالنصوص

 

الحل عندى سأضعه إن أردت

 

لكن أرجة أن تجده أنت أوله

 

هذا الأسبوع عندي إمتحانات نتلقي الأسبوع القادم

#15

نقلت  الكلام  بخطأه  كما  هو  من  الموضوع  :P  انتبهت  بعد  ما  كتبت  :wacko:

للإطلاع  على جديد  الكتب من تأليفي


 


الطريق لاحتراف تطوير المواقع   ج1 | ج2 | ج3 | ج4


 


                    4Colors | Break Out | Classic Snake | لعبة السودوكو - 2014  |  لعبة  XO                      


 


Help Dodo


 


^_^


 

#16

هذا الحل ان شاء الله يكون صحيح

سواء ادخل المستخدم كلمة او عدد :)

#!/usr/bin/env pythondef isEven(n):    if len(n) %2 == 0:        return True    return Falsedef rounding(w):    n = []    for i in w:        n.append(i)    i, j = 0, 0    result = []    while i < len(n):        if n == n[-i-1]:            j += 1        else:            maxValue = max(n, n[-i -1])            result.append(maxValue)        i += 1    if j == len(w):        result = n    return resultdef outPut(w):    if isEven(w):        return rounding(w)    n = []    for i in w:        n.append(i)    medianValue = len(w) // 2    popValue = n.pop(medianValue)        n = rounding(n)    n.insert(medianValue, popValue)    return nword = input('Enter something: ')print(''.join(outPut(word)))

تم تعديل هذه المشاركة بواسطة m ahmed في 25 مايو 2014 في 21:14

1
#17

محاولات جيدة أخي

 

لكن البرنامج لا يعطي نتائج صحيحة

 

جربت بادخال الرقم 123

 

فطبع لي 322  بينما الحل الصحيح هو 222  ليس أدرى لماذا لم تتمكن من معرفة أن البرنامج يعطي نتائج خاطئة

 

عليك أن تجربه أولا و ترى إن كان يعمل أو لا

 

المشكلة في برنامجك أنك تختار أكبر قيمة و تضعها في طلتا الطرفين

 

و كما قلت لك عليك أن تجد القانون(الصيغة الرياضية ) فذلك سيساعدك كثير

 

سأساعده في الصيغة (إذا كان الشطر الأعلا من الرقم أكبر من معكوس الشطر الثاني نجعل الثاني يساوي معكوس الشطر الأول و إن كان الشكر الثاني أكبر نضيف للشطر الأول واحد و نجعل الشطر الثاني يساوي معكوس(الشطر الأول الجديد))

 

البرنامج يقرأ عدد من عند المستخدم

 

إذا كان طول العدد فردي مثلا 1230456

 

الأن نقسم العدد لقسمين و تضع كل قسم في متغير

ص=123   ض=456

نعكس الشطر الثاني   ض=654

الأن نقارن

 

نلاحظ أن الشطر الأول أكير لذا نضيف له واحد و نجعل الشطر الثاني يساوي معكوسه

ص=124   ض=421

 

الأن نغير في العدد الأصلي

فيصبح 1240421

 

أرجو أن تكون الفكرة قد وصلت

 

لقد استعملت متغيرات بالعربية حتي لا أضطر إلا تغيير لغة الكتابة في كل مرة

 

الأن قم ببرمجة دالة لعكس الأرقام

 

و قم ببرمجة من جديد

 

في انتظار مشاركتك

#18

لا اخي البرنامج عند ادخال 123 سيطبع 323

انا اختبرت البرنامج اكثر من مرة

صحيح ان الكود الذي كتبه طويل بعض الشي بالرغم انني متأكد ان اللغز سينحل في اسطر قليلة لكن هذا اللي قدرت عليه :)

سأحاول مرة اخرى ..

#19
السلام عليكم 

تفضل حل على السريع: The pythonist way

 


    s = "1230456"

    def test_palin(s):

        if s == s[::-1]:

            print s, ' is palindrom' 

        else:

            lgth = len(s)

            if lgth%2 == 1:

                p1 = int(s[:lgth/2])

                p2 = int(s[lgth/2 +1:][::-1])

                res = p2 > p1 and str(p1+1) + s[lgth/2] + str(p1+1)[::-1] or str(p1) + s[lgth/2] + str(p1)[::-1]

                print res

            else:

                p1 = int(s[:lgth/2 ])

                p2 = int(s[lgth/2 :][::-1])

                res = p2 > p1 and str(p1+1) +  str(p1+1)[::-1] or str(p1) +  str(p1)[::-1]

                print res


    test_palin(s)


 

1
#20

ممتاز أخي   med reda   لقد طبقت تحليلى للتمرين

 

البرنامج يعمل كما أنه بسيط و بعدد أقل من الأسطر

 

أح m ahmed أحيانا نحل المشكلة بشكل معقدة بينما يوجد حلول أبسط بكثر

 

يمكننا تبسيط كود الاخ med reda  لنجعله أبسط و بأقل عدد من الأسطر,

 

أخ m ahmed لقد سبق و وعدتك بأن أكتب برنامج يتأكد إن كان العدد palindrom أم لا بست أسطر فقط و ها هو البرنامج

def test_palin(s):
        s=str(s)
        if s[:len(s)//2]!= s[len(s)//2+len(s)%2:][::-1]:
            return 'not a palidrome'
        else:
            return 'palindrom'

أرجو منك أن تصنع برنامج مماثل لبرنامجي كحل للتمرين

#21

يمكن كتابته في سطر واحد

test = lambda x : str(x) == str(x)[::-1] and 'palin' or 'not palin'

وعند استخدامها يجب تطبيق الامر التالي

test(s)

علما ان s به العدد المراد التحقق منه

1
#22

أنت ماهر جدا أخي

 

الكلمة المحجوزة lambda تستعمل لتعريف الدوال في سطر واحد

 

المهم برنامج التعرف على إن كان العدد المدخل palindrome أو لا أصبح مكون من سطر واحد فقط

 

الآن إن أمكن أن نقلل عدد الأسطر في حل التمرين

 

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

 

فبذلك نقلل وقت التنفيذ و استهلاك الذاكرة (لكن ليس دائما عدد أقل من الأسطر=عدد أقل من الذاكرة و الوقت)

1
#23
kenham كتب:
 
3:التأكد من أن عددين متساويين أو لا،من دون استعمال رمز المساوات '==':
 
A=input(' ')

B=input(' ')

if A>B:

    print 'A!=B'

else:

    if A<B:

        print 'A!=B'

    else:

        print 'A==B'

equal= lambda x,y : not x!=y
1
#24

#!/usr/bin/env python

def test_palin(s):

s=str(s)

if s[:len(s)//2]!= s[len(s)//2+len(s)%2:][::-1]:

return 'not a palidrome'

else:

return 'palindrom'

########## في أسطر أقل ##########

# 1

def test_palin(s):

s=str(s)

if s[:len(s)//2]!= s[len(s)//2+len(s)%2:][::-1]:

return 'not a palidrome'

return 'palindrom'

# 2

# True => Palindrome

# False => Not Palindrome

def test_palin(s):

return str(s)[:] == str(s)[::-1]

#25

التعرف على إن كان العدد palindrome

 

تمت كتابه في سكر واحد فقط

 

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

مواضيع مشابهة