2015-01-20 37 views
9

playSound समारोह पूर्णांकों की एक सूची ले जा रहा है, और हर अलग संख्या के लिए एक ध्वनि खेलने के लिए जा रहा है के रूप में व्याख्या नहीं की जा सकती। तो अगर सूची में से किसी एक नंबर 1 है, 1 एक नामित ध्वनि है कि यह खेलेंगे है।लेखन त्रुटि: 'सूची' वस्तु एक पूर्णांक

def userNum(iterations): 
    myList = [] 
    for i in range(iterations): 
    a = int(input("Enter a number for sound: ")) 
    myList.append(a) 
    return myList 
    print(myList) 

def playSound(myList): 
    for i in range(myList): 
    if i == 1: 
     winsound.PlaySound("SystemExit", winsound.SND_ALIAS) 

मैं इस त्रुटि हो रही है:

TypeError: 'list' object cannot be interpreted as an integer 

मैं पूर्णांकों के लिए सूची में कनवर्ट करने के लिए कुछ तरीके की कोशिश की है। मुझे यकीन नहीं है कि मुझे क्या बदलने की जरूरत है। मुझे यकीन है कि ऐसा करने का एक और अधिक प्रभावी तरीका है। किसी भी मदद की बहुत सराहना की जाएगी।

उत्तर

2

आप इस बजाय करना चाहिए:

for i in myList: 
    # etc. 

है, range() भाग को हटा दें। range() समारोह संख्या का एक अनुक्रम उत्पन्न करने के लिए प्रयोग किया जाता है, और सीमा पैरामीटर के रूप में सीमा उत्पन्न करने के लिए यह प्राप्त करता है, यह पैरामीटर के रूप में एक सूची पारित करने के लिए काम नहीं करेगा। सूची में पुनरावृत्ति के लिए, ऊपर दिखाए गए लूप को बस लिखें।

2

range एक पूर्णांक तर्क, जहाँ से यह पूर्णांकों की एक श्रृंखला का निर्माण करेगा उम्मीद कर रही है: इसके अलावा

>>> range(10) 
range(0, 10) 
>>> list(range(10)) 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
>>> 

, यह सूची देते हुए एक TypeError क्योंकि range यह कैसे संभाल करने के लिए पता नहीं होगा बढ़ा देंगे:

>>> range([1, 2, 3]) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: 'list' object cannot be interpreted as an integer 
>>> 

आप सीधे सूची पर myList में आइटम का उपयोग करने के, पाश चाहते हैं:

for i in myList: 
    ... 

डेमो:

>>> myList = [1, 2, 3] 
>>> for i in myList: 
...  print(i) 
... 
1 
2 
3 
>>> 
1

playSound() में,

for i in range(myList): 

के बजाय कोशिश

for i in myList: 

यह myList की सामग्री है, जो मेरा मानना ​​है कि अधिक पुनरावृति जाएगा क्या है तुम्हें चाहिए। range(myList) कोई समझ नहीं आता है।

1

त्रुटि इस से है:

def playSound(myList): 
    for i in range(myList): # <= myList is a list, not an integer 

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

def playSound(myList): 
    for list_item in myList: 

या

def playSound(myList): 
    for i in range(len(myList)): 

या

def playSound(myList): 
    for i, list_item in enumerate(myList): 
2

range को हटा दें।

for i in myList 

रेंज एक पूर्णांक में लेता है। आप सूची में प्रत्येक तत्व के लिए चाहते हैं।

1
def userNum(iterations): 
    myList = [] 
    for i in range(iterations): 
     a = int(input("Enter a number for sound: ")) 
     myList.append(a) 
    print(myList) # print before return 
    return myList # return outside of loop 

def playSound(myList): 
    for i in range(len(myList)): # range takes int not list 
     if i == 1: 
      winsound.PlaySound("SystemExit", winsound.SND_ALIAS) 
9

त्रुटि संदेश आमतौर पर ठीक मतलब कि वे क्या कहते। तो उन्हें बहुत सावधानी से पढ़ा जाना चाहिए। जब आप ऐसा करते हैं, तो आप देखेंगे कि यह वास्तव में शिकायत नहीं कर रहा है, जैसा कि आपने माना है कि आपकी सूची किस प्रकार की ऑब्जेक्ट में है, लेकिन इसके बारे में किस प्रकार की ऑब्जेक्ट है। यह नहीं कह रहा है कि यह चाहता है कि आपकी सूची में पूर्णांक (बहुवचन) शामिल हों- ऐसा लगता है कि ऐसा लगता है कि आपकी सूची किसी भी सूची की बजाय एक पूर्णांक (एकवचन) हो। और चूंकि आप एक सूची को एक पूर्णांक में परिवर्तित नहीं कर सकते हैं (कम से कम, इस संदर्भ में अर्थपूर्ण नहीं है) आपको कोशिश नहीं करनी चाहिए।

तो सवाल यह है कि क्यों दुभाषिया आपकी सूची को पूर्णांक के रूप में समझना चाहता है? जवाब यह है कि आप range पर इनपुट तर्क के रूप में अपनी सूची उत्तीर्ण कर रहे हैं, जो एक पूर्णांक की अपेक्षा करता है। ऐसा मत करो। इसके बजाय for i in myList कहें।

+1

या 'i i रेंज (लेन (myList)) 'यदि तत्वों के बजाय इंडेक्स पर पुनरावृत्ति करना चाहते हैं। – 3yakuya

+2

या 'इंडेक्स के लिए, एन्युमेरेट में आइटम (myList)' आपको दोनों प्राप्त करने के लिए, आईएमओ अधिक पठनीय रूप से – jez

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