2012-01-21 13 views
5
def RandomString (length,distribution): 
    string = "" 
    for t in distribution: 
     ((t[1])/length) * t[1] += string 
    return shuffle (string) 

यह शीर्षक में वर्णित वाक्यविन्यास त्रुटि देता है। इस उदाहरण में, distribution एक पत्र युक्त प्रत्येक टपल, और इसके वितरण, 100 तक जोड़कर सूची से सभी वितरण के साथ, उदाहरण के लिए के साथ, tuples की एक सूची है:वाक्यविन्यास-त्रुटि: ऑपरेटर को

[("a",50),("b",20),("c",30)] 

और length की लंबाई है वह स्ट्रिंग जो आप चाहते हैं।

उत्तर

9

पायथन परेशान है क्योंकि आप किसी ऐसे मूल्य को असाइन करने का प्रयास कर रहे हैं जिसे मूल्य निर्दिष्ट नहीं किया जा सकता है।

((t[1])/length) * t[1] += string 

जब आप एक असाइनमेंट ऑपरेटर का उपयोग करते हैं, तो आप बाईं ओर चर या तत्व के दाईं ओर क्या मानते हैं उसका मान असाइन करते हैं। आपके मामले में, बाईं ओर कोई चर या तत्व नहीं है, बल्कि इसके बजाय एक व्याख्या मूल्य: आप किसी ऐसे चीज़ को मान निर्दिष्ट करने का प्रयास कर रहे हैं जो "कंटेनर" नहीं है।

जो आपने लिखा है उसके आधार पर, आप केवल यह सोच रहे हैं कि यह ऑपरेटर कैसे काम करता है। बस अपने ऑपरेटरों को इस तरह स्विच करें।

string += str(((t[1])/length) * t[1]) 

ध्यान दें कि मैं इसे एक str में परिवर्तित करने के इतना है कि यह string चर में डाला गया की जा रही है के साथ संगत है में str में सौंपा मूल्य लिपटे गए हैं। (संख्याओं और तारों को एक साथ जोड़ा नहीं जा सकता है।)

+0

यह मुझे एक प्रकार की त्रुटि देता है TypeError: 'float' ऑब्जेक्ट को str implicitly किसी भी विचार में परिवर्तित नहीं कर सकता? – TheFoxx

+0

हां। लेकिन यह सब उस चीज पर निर्भर करता है जिसे आप 'स्ट्रिंग' जैसा दिखाना चाहते हैं। कृपया प्रदान किए गए उदाहरण इनपुट पर 'स्ट्रिंग' का मूल्य क्या होना चाहिए, इस पर विस्तृत करें। मैंने आपके उत्तर को अनुमान के साथ संशोधित किया है कि आप क्या खोज रहे हैं। – cheeken

-3

तुम क्या लगता है कि यह माना जाता है: ((t[1])/length) * t[1] += string

अजगर इस पार्स नहीं कर सकता है, यह एक सिंटैक्स त्रुटि है।

+0

खैर वास्तव में अपनी इस होना, मैं सिर्फ relised ((टी [1]/10)/लंबाई) * टी [1] मूल रूप से यह प्रत्येक पत्र के लिए विनाश लेता है, यह पता लगाता है कि उस पत्र को यादृच्छिक स्ट्रिंग में कितनी बार होना चाहिए, और उसके बाद स्ट्रिंग – TheFoxx

+0

@ user1048244 नामक खाली स्ट्रिंग में कई अक्षरों को जोड़ना: यह प्रासंगिक नहीं है यह इसके लिए है - जैसा लिखा है कि यह वाक्य रचनात्मक रूप से वैध नहीं है। – Marcin

0

((t[1])/length) * t[1] += string के बजाय, आपको string += ((t[1])/length) * t[1] का उपयोग करना चाहिए। (अन्य वाक्यविन्यास मुद्दा - int is not iterable - पता लगाने के लिए आपका अभ्यास होगा।)

+0

मैंने अभी कोशिश की है और यह मुझे बता रहा है TypeError: 'फ्लोट' ऑब्जेक्ट को str implicitly – TheFoxx

+0

पर कनवर्ट नहीं कर सकता है: आप पाइथन के 'स्टेटमेंट 'में उस अर्थ में' वितरण' का उपयोग नहीं कर सकते हैं। शायद आपके वितरण का 'रेंज' उपयुक्त होगा ...? – Makoto

1

ठीक है, जैसा कि त्रुटि कहती है, आपके पास एक चर नाम के बजाय असाइनमेंट के बाईं ओर एक अभिव्यक्ति (((t[1])/length) * t[1]) है। आपके पास वह अभिव्यक्ति है, और फिर आप पाइथन को string जोड़ने के लिए कहते हैं (जो हमेशा "" है) और इसे असाइन करें ... कहां? ((t[1])/length) * t[1] एक चर नाम नहीं है, इसलिए आप इसे परिणाम में संग्रहीत नहीं कर सकते हैं।

क्या आपका मतलब string += ((t[1])/length) * t[1] था? इससे अधिक समझदारी होगी। बेशक, आप अभी भी एक स्ट्रिंग में कोई संख्या जोड़ने की कोशिश कर रहे हैं, या एक स्ट्रिंग द्वारा गुणा करें ... उनमें से t[1] एस शायद t[0] होना चाहिए।

+0

हां यह टी [0] होना चाहिए, मेरा कोड सामान्य रूप से त्रुटियों से भरा नहीं है, ive बस इसे समझने की कोशिश कर लगभग 10 बार इसे पुनः टाइप किया गया .. – TheFoxx

-4
अजगर में

ही काम

a=4 
b=3 

i=a+b 

जो मैं नए ऑपरेटर

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