2012-06-21 16 views
12

मैं एक प्रोग्राम है जो एक स्ट्रिंग ले जाएगा लिखने के लिए चाहते हैं, मान लीजिए कि "Fox" करते हैं, तो यह प्रदर्शित होगा:एक स्ट्रिंग के सभी, ऊपरी कम और मिश्रित मामले संयोजन

fox, Fox, fOx, foX, FOx, FoX, fOX, FOX 

मेरे कोड अब तक:

string = raw_input("Enter String: ") 
length = len(string) 
for i in range(0, length): 
    for j in range(0, length): 
     if i == j: 
      x = string.replace(string[i], string[i].upper()) 
      print x 

आउटपुट अब तक:

Enter String: fox 
Fox 
fOx 
foX 
>>> 
+2

आप इस के लिए पुस्तकालय कार्यों का उपयोग करने की अनुमति दी है? – georg

+2

@thg: उन्होंने यह नहीं कहा कि यह होमवर्क था, इसलिए जाहिर है कि वह सबसे सुरुचिपूर्ण समाधान चाहता है (जिसमें शायद 'itertools' शामिल होगा;) –

+0

हां। मुझे – Whiskey

उत्तर

23
>>> import itertools 
>>> map(''.join, itertools.product(*((c.upper(), c.lower()) for c in 'Fox'))) 
['FOX', 'FOx', 'FoX', 'Fox', 'fOX', 'fOx', 'foX', 'fox'] 

या

>>> s = 'Fox' 
>>> map(''.join, itertools.product(*zip(s.upper(), s.lower()))) 
+0

मुझे इसे हराया! – beoliver

+0

बहुत अच्छा समाधान। –

+0

यह अच्छा है, लेकिन इसमें कुछ स्पष्टीकरण की आवश्यकता है। – Marcin

5

मैं हमेशा इस कोशिश करना चाहता था।

कोई विचार नहीं है कि यह आपकी योग्यता के अनुरूप है (हालांकि यह काम करता है)।

str = raw_input() 
def getBit(num, bit): 
    return (num & 1 << bit) != 0 



for i in xrange(0,2**len(str)): 
    out = "" 
    for bit in xrange(0,len(str)): 
     if getBit(i,bit): 
     out += str[bit].upper() 
     else: 
     out += str[bit].lower() 

    print out 

विचार यह है कि जैसे ही आप बाइनरी में वृद्धि करते हैं, आपको 1s और 0s के हर संभव क्रमपरिवर्तन मिलता है।

फिर आप बस 1s और 0s की एक स्ट्रिंग को एक स्ट्रिंग में परिवर्तित करते हैं, 1 जिसका अर्थ है अपरकेस, 0 अर्थ लोअरकेस।

1

एक लाइनर सूची का उपयोग कर समझ:

from itertools import permutations 
strs='fox' 
combin=[''.join(x)for x in permutations(list(strs)+list(strs.upper()),3) if ''.join(x).lower()=='fox'] 
print(combin) 
['fox', 'foX', 'fOx', 'fOX', 'Fox', 'FoX', 'FOx', 'FOX'] 

प्रयोग करने के लिए में पाश:

from itertools import permutations 
strs='fox' 
lis2=list(strs)+list(strs.upper()) 
for x in permutations(lis2,3): 
    if ''.join(x).lower()=='fox': 
     print(''.join(x)) 

fox 
foX 
fOx 
fOX 
Fox 
FoX 
FOx 
FOX 
+0

धन्यवाद अश्विनी..ल पोस्ट मेरे लिए सहायक रहा है .. – Whiskey

1

यह @ द्वारा उत्कृष्ट, स्वीकार किए जाते हैं जवाब है महाकाव्य थोड़ा सा संशोधित।

परिवर्तन:

  • अपर-केस से पहले लोअर केस, बस इतनी सूची "लोमड़ी" के साथ बजाय "फॉक्स" के शुरू होता है

  • (प्रश्न के उदाहरण अनुक्रम "लोमड़ी" के साथ शुरू होता) map() के बजाय एक सूची समझ की

    उपयोग (किसी भी तरह, ठीक है वास्तव में)

  • कोड कम/अपर केस जोड़े बनाने के लिए उत्पन्न करता है कि बाहर तोड़ दिया यह और अधिक स्पष्ट

  • इसे एक फ़ंक्शन में पैक किया गया।

कोड:

import itertools as it 

def cap_permutations(s): 
    lu_sequence = ((c.lower(), c.upper()) for c in s) 
    return [''.join(x) for x in it.product(*lu_sequence)] 
संबंधित मुद्दे