2011-06-06 14 views
8

मुझे इस आईएफ स्टेटमेंट को लिखने का यह बहुत ही कठिन तरीका है।एक कथन का उपयोग कर एक सीमा का उपयोग करने का सुरुचिपूर्ण तरीका?

for a in range (2,3000): 
    if (a % 1) == 0 and (a % 2) == 0 and (a % 3) == 0 and (a % 4) == 0 and (a % 5) == 0 and (a % 6) == 0 and (a % 7) == 0 and (a % 8) == 0 and (a % 9) == 0 and (a % 10) == 0 : 
    print a 

मुझे लगता है कि इसे लिखने का एक बेहतर तरीका है, उदाहरण के लिए आईएफ स्टेटमेंट के साथ एक रेंज फ़ंक्शन का उपयोग करना?

+2

जैसे कुछ कर सकते हैं क्या आपने 8, 9, 5, और 7 गुणा करने की कोशिश की है? –

उत्तर

12

एक और अधिक या कम सीधा अनुवाद के लिए, कैसे के बारे में

for a in range(2, 3000): 
    if all(a % k == 0 for k in range(1,11)): 
     print a 

हालांकि निश्चित रूप से एक% 1 == 0 सभी पूर्णांकों एक के लिए, ताकि जांच अनावश्यक है।

+0

अच्छा, धन्यवाद :) –

7

आपको एलसीएम (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) के गुणक जो आपकी सीमा के भीतर आते हैं, के गुणक हैं। एलसीएम की गणना करने के कई तरीके हैं (देखें http://en.wikipedia.org/wiki/Least_common_multiple)

एलसीएम (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) = 2^3 * 3^2 * 5 * 7 = 2520, आप

lcm = 2520 
i = 2/lcm 
j = 3000/lcm 
for k in range(i, j) 
    print (k + 1) * lcm 
+0

आपके पास अपनी अंतिम रेखा में एक गुम कॉलोन है। – BioGeek

संबंधित मुद्दे