2016-03-04 5 views
5

मुझे पैरामीटर (वर्ण, स्ट्रिंगऑन, स्ट्रिंगटवो) ले जाने की आवश्यकता है। फ़ंक्शन एक नया शब्द देता है जिसमें स्ट्रिंग दो के समान डेटा होता है + स्ट्रिंग में जो भी वर्ण एक ही स्थिति में होते हैं।स्ट्रिंग से अक्षर को दो स्ट्रिंग करने के लिए दो

उदाहरण:

  • stringOne = "सेब"
  • stringTwo = "12345"
  • चरित्र = "पी"
  • लौटना चाहिए "1pp45"

मैं खो रहा हूँ मुझे कैसे आगे बढ़ना चाहिए।

def replace(char, word1, word2): 
newWord = "" 
for s in range(len(word1)): 
    if word1[s] == char: 
return 
+4

आपको अपने कोड उदाहरण के इंडेंटेशन को ठीक करना चाहिए। – Carpetsmoker

उत्तर

2

यहाँ इतना है कि यह आप क्या चाहते हैं करता है कैसे अपने मौजूदा कोड को संशोधित करने के लिए। मैंने मानक पायथन शैली सम्मेलन के अनुरूप newWordnew_word बदल दिया है।

def replace(char, word1, word2): 
    new_word = "" 
    for i in range(len(word2)): 
     if word1[i] == char: 
      new_word += char 
     else: 
      new_word += word2[i] 
    return new_word 

# Test 
print(replace("p", "apple", "12345"))  

उत्पादन

1pp45 

नोट यदि word1word2 तुलना में कम है कि इस कोड एक IndexError: string index out of range अपवाद बढ़ा देंगे।

इस फ़ंक्शन को लागू करने के कई बेहतर तरीके हैं। सबसे पहले, हम zip फ़ंक्शन का उपयोग समानांतर में दोनों तारों के अक्षरों पर फिर से करने के लिए कर सकते हैं। पात्रों तक पहुंचने के लिए तारों के सूचकांक का उपयोग करके यह आपके अप्रत्यक्ष पुनरावृत्ति से थोड़ा सा क्लीनर है।

def replace(char, word1, word2): 
    new_word = "" 
    for c1, c2 in zip(word1, word2): 
     if c1 == char: 
      new_word += char 
     else: 
      new_word += c2 
    return new_word 

ध्यान दें कि यदि तार की लम्बाई समान नहीं हैं तो zip शान से जब छोटे स्ट्रिंग खत्म बंद हो जाएगा।

हम if... else ब्लॉक को एक सशर्त अभिव्यक्ति के साथ बदलकर उस कोड को अधिक कॉम्पैक्ट बना सकते हैं।

def replace(char, word1, word2): 
    new_word = "" 
    for c1, c2 in zip(word1, word2): 
     new_word += char if c1 == char else c2 
    return new_word 

एक और अधिक उन्नत संस्करण एक सूची समझ का उपयोग करता वांछित वर्णों की एक सूची है और एक स्ट्रिंग में उस सूची कन्वर्ट करने के लिए स्ट्रिंग .join विधि बनाने के लिए।

def replace(char, word1, word2): 
    return ''.join([char if c1 == char else c2 
     for c1, c2 in zip(word1, word2)]) 

जनरेटर अभिव्यक्ति का उपयोग करके ऐसा करना भी संभव है।

''.join(char if c1 == char else c2 for c1, c2 in zip(word1, word2)) 

हालांकि कि कारण तरीका है कि .join कार्यों के लिए, एक सूची समझ का उपयोग करने से कम कुशल है। .join को दो बार अपना तर्क स्कैन करना होगा: पहला स्कैन आउटपुट स्ट्रिंग के कुल आकार की गणना करने के लिए उपयोग किया जाता है, दूसरा स्कैन वास्तविक जुड़ाव करता है। लेकिन आप जनरेटर को दो बार स्कैन नहीं कर सकते हैं, इसलिए यदि आप .join पास करते हैं तो जनरेटर को जनरेटर से अस्थायी सूची बनाना पड़ता है।

1

आप एक सूची समझ, पुनरावृत्ति और प्रतिस्थापन का भी उपयोग कर सकते हैं।

>>> x, y, c = 'apple', '12345', 'p'    
>>> ''.join([c if x[i] == c else s for i, s in enumerate(y)]) 
'1pp45' 
+0

यह ऐसा कोड नहीं है जिसे मैं प्रोग्राम सीखने के लिए संघर्ष करने वाले किसी को दिखाऊंगा। – Carpetsmoker

1

pythonic तरीका:

>>> stringOne = "apple" 
>>> stringTwo = "12345" 
>>> my_char = "p" 
>>> "".join([x[1] if my_char!=x[0] else x[0] for x in zip(stringOne, stringTwo)]) 
'1pp45' 
5

को जारी रखते हुए आप क्या किया है, सरल for-loop और त्रिगुट आपरेशन का उपयोग कर, यह कैसे किया जा सकता है:

def replace(char, word1, word2): 
    newWord = "" 
    for s in range(len(word1)): 
     newWord += char if word1[s] == char else word2[s] 
    return newWord 

कौन सा के बराबर है:

def replace(char, word1, word2): 
    newWord = "" 
    for s in range(len(word1)): 
     if word1[s] == char: 
      newWord += char 
     else: 
      newWord += word2[s] 
    return newWord 

बस अगर आप टर्नरी ऑपरेशन से परिचित नहीं हैं।

1
def replace(char, word1, word2): 
    newWord= list(word2) 
    for counter in range(min(len(word1), len(word2))): 
      if word1[counter]== char: 
        newWord[counter]= char 
    return "".join(newWord) 
0

सरल समाधान word1 के पात्रों के माध्यम से पुनरावृति करने के लिए हो सकता है और अगर एक चरित्र मैच चरित्र है कि हम खोजने में रुचि रखते हैं के साथ पाया जाता है, तो हम WORD2 में है कि सूचकांक में चरित्र की जगह।

def replace(char, word1, word2): 
    newWord = "" 
    word2List = list(word2) 
    # Check is character is present in word1 
    # and if length of word1 and word2 are equal 
    if char not in word1 or len(word1) != len(word2): 
     return False 
    else: 
     for i,c in enumerate(word1): 
      if c == char: 
       word2List[i] = c 



    # Converting list back to string 
    return ''.join(word2List) 

print(replace('p','apple','12345')) 

आउटपुट:

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