2009-10-03 24 views
7

एक शांत शनिवार की रात (wooohoo ... नहीं) पर कुछ पहेली समस्याओं का सामना करना और क्रमबद्ध() के साथ संघर्ष कर रहा हूं। नतीजे मुझे काफी उम्मीद नहीं हैं। कार्यक्रम 100 - 999 से प्रत्येक संयोजन के माध्यम से पुनरावृत्त करता है और जांच करता है कि उत्पाद एक पालिंडोम है या नहीं। यदि यह है, तो सूची में शामिल करें। यहाँ डी मेरा कार्यक्रम है:: मैं सूची अनुसार क्रमबद्ध जरूरतपायथन .sort() अपेक्षित काम नहीं कर रहा है

list = [] #list of numbers 

for x in xrange(100,1000): #loops for first value of combination 
    for y in xrange(x,1000): #and 2nd value 
    mult = x*y 
    reversed = str(mult)[::-1] #reverses the number 
    if (reversed == str(mult)): 
     list.append(reversed) 

list.sort() 
print list[:10] 

जो जाल:

['101101', '10201', '102201', '102201', '105501', '105501', '106601', '108801', 
'108801', '110011'] 

जाहिर सूचकांक 0 बड़ा तो 1. किसी भी विचार क्या हो रहा है है? मुझे लगता है कि यह पिछला/अग्रणी शून्य के साथ कुछ करने के लिए है, लेकिन मुझे एक त्वरित रूप से देखा गया था और मैं समस्या को नहीं देख सकता।

बोनस अंक आप जानते हैं कि जहां पहेली आता है से: पी

+1

Palindrome दोस्त – whatnick

+2

यह परियोजना यूलर से है, मुझे लगता है। –

+0

@ जे एस: बिंगो: डी –

उत्तर

20

आप तार संख्या छँटाई कर रहे हैं, नहीं। '101101' < '10201' क्योंकि '1' < '2'list.append(reversed)list.append(int(reversed)) पर बदलें और यह काम करेगा (या एक अलग सॉर्टिंग फ़ंक्शन का उपयोग करें)।

+6

ओह मैन ... बस जब मैंने सोचा कि मैं नोब से स्नातक हो रहा था, तो रूकी;) धन्यवाद! –

0

आपके पास नंबरों को स्ट्रिंग के रूप में संग्रहीत किया गया है, इसलिए अजगर उन्हें तदनुसार सॉर्ट कर रहा है। तो: '101x' '102x' से पहले आता है (वैसे ही 'abcd' 'az' से पहले आएगा)।

0

नहीं, यह ठीक से छँटाई है, सिर्फ इतना है कि यह lexographically छँटाई है और आप सांख्यिक चाहते छँटाई ... इसलिए "str()"

+1

एक अलग विषय पर, आपका प्रोग्राम ई अनुकूलित किया जा सकता है। संकेत: ** ** संख्याएं उत्पन्न करें .. – aviraldg

+0

हाँ मुझे पता है, और मैं उन्हें बाद में संकलित कर सकता हूं, लेकिन यह काम के लिए पर्याप्त तेज़ है। –

1

आप छँटाई रहे तार, नहीं संख्या को हटा दें। स्ट्रिंग्स बाएं से दाएं की तुलना करें।

2

आपकी सूची में तार हैं इसलिए यह उन्हें वर्णानुक्रम में क्रमबद्ध कर रहा है - सूची को पूर्णांक में परिवर्तित करने का प्रयास करें और फिर क्रमबद्ध करें।

0

तुलनित्र ऑपरेटर आपके इनपुट को पूर्णांक के बजाय स्ट्रिंग के रूप में देख रहा है। स्ट्रिंग कंपर्सन 2 में तीसरा अक्षर 1.x reversed = str(mult)[::-1]

11

क्रमशः अपना काम कर रहा है। यदि आप सूची में पूर्णांक स्टोर करना चाहते हैं, तो लुकास सलाह लें। तुम भी तरह बता सकता है कि बनाने ints द्वारा उदाहरण के लिए सॉर्ट करने के लिए,:

list.sort(key=int) 

प्रमुख पैमाना एक समारोह है कि एक आइटम की गणना करता है सभी की तुलना में सूची वस्तु की जगह लेने के लिए ले जाता है। एक पूर्णांक संख्यात्मक रूप से तुलना करेगा जैसा आप उम्मीद करते हैं।

int करने के लिए कन्वर्ट करने के लिए कोई ज़रूरत नहीं (वैसे, list एक बहुत बुरा चर नाम, है आप अंतर्निहित सूची ओवरराइड के रूप में() टाइप!)

1

। mult पहले से ही एक पूर्णांक है और जैसा कि आप जाँच कर ली है यह विलोमपद यह एक ही, के रूप में उलट तो बस दिखेगा:

list.append(mult) 
संबंधित मुद्दे