मैं अल स्वीगार्ट की पुस्तक "ऑटोमेट द बोरिंग स्टफ विद पायथन" के माध्यम से पायथन सीख रहा हूं। मैं सूचियों पर एक अध्याय समाप्त कर रहा हूं, और मेरे पास "कॉमा कोड" नामक एक प्रोग्राम प्रॉम्प्ट है:

मान लें कि आपके पास इस तरह का एक सूची मूल्य है:

spam = ['apples', 'bananas', 'tofu', 'cats']

एक फ़ंक्शन लिखें जो एक सूची मान को एक तर्क के रूप में लेता है और एक स्ट्रिंग देता है जिसमें सभी आइटम अल्पविराम और एक स्थान से अलग होते हैं, जिसमें अंतिम आइटम से पहले और डाला जाता है। उदाहरण के लिए, पिछली स्पैम सूची को फ़ंक्शन में पास करने से 'apples, bananas, tofu, and cats' वापस आ जाएगा। लेकिन आपका कार्य किसी भी सूची मूल्य के साथ काम करने में सक्षम होना चाहिए। "

यहाँ मेरा कोड अब तक है:

def commaCode(newList):
   print(str(newList[:-1]) + 'and' + ' ' +  str(newList[-1]))
   return

nextlist = []
anotherlist = input('Enter a value')
while anotherlist != '':
   nextlist = nextlist + list(anotherlist)

commaCode(nextlist)

मुझे लगता है कि यह काम करना चाहिए, लेकिन जब भी मैं किसी प्रकार के इनपुट में टाइप करता हूं, तो प्रोग्राम बस मुझे और इनपुट डालने की इजाजत देता है, और कुछ भी नहीं होता है। मैं फिर कार्यक्रम से बाहर निकलने की कोशिश करता हूं और यह पूछता है कि क्या वह चाहता है कि मैं "कार्यक्रम को मार दूं"। मुझे यकीन नहीं है कि मेरे कोड के साथ समस्या क्या है ... मुझे लगता है कि यह "जबकि" कथन के साथ हो सकता है, लेकिन मुझे यकीन नहीं है कि इसे कैसे ठीक किया जाए।

3
Shahmeer Hashmat 18 अगस्त 2018, 07:09
प्रोग्रामिंग की आश्चर्यजनक रूप से निराशाजनक दुनिया में आपका स्वागत है। जब आप इस तरह की समस्याओं का सामना करते हैं, तो उन्हें ट्रैक करने में सक्षम होना महत्वपूर्ण है। हम इसे "डीबगिंग" कहते हैं जो विकसित करने के लिए सबसे महत्वपूर्ण कौशलों में से एक है। शुरुआत के लिए, ericlippert.com/ पर टिप्स देखें। 2014/03/05/हाउ-टू-डीबग-स्मॉल-प्रोग्राम्स अपने कोड में समस्याओं को ट्रैक करने के तरीके के बारे में कुछ विचारों के लिए।
 – 
Code-Apprentice
18 अगस्त 2018, 07:44

9 जवाब

अच्छा प्रयास। आपका कार्य काफी करीब है, लेकिन आपका while असीम रूप से चलेगा क्योंकि anotherList लूप ब्लॉक के अंदर कभी नहीं बदलता है। nextlist इस लूप में विस्तार करता रहेगा, हालांकि, उपयोगकर्ता ने input() में जो भी स्ट्रिंग पास की है, उसे वर्णों में विभाजित किया गया है। आखिरकार, प्रोग्राम मेमोरी से बाहर हो जाएगा और क्रैश हो जाएगा।

इसके लिए मेरा शब्द न लें: print वेरिएबल जो लूप ब्लॉक के अंदर लूप को समाप्त करने वाला है और देखें कि यह प्रत्येक पास (महत्वपूर्ण डिबगिंग कौशल) पर क्या कर रहा है।

इसे ठीक करने के कुछ तरीके हैं। नीचे दिया गया दृष्टिकोण उपयोगकर्ता को प्रत्येक लूप पास पर इनपुट दर्ज करने की अनुमति देता है, जिसके परिणामस्वरूप या तो break लूप खाली होता है या यदि नहीं तो उपयोगकर्ता इनपुट की संचय सूची में जोड़ा जाता है।

def comma_code(items):
   return ', '.join(items[:-1]) + ' and ' + items[-1]

items = []

while 1:
    user_input = input('Enter a value: ')
    
    if user_input == '':
        break
    
    items.append(user_input)

print(comma_code(items))

नमूना रन:

Enter a value: 1
Enter a value: 2
Enter a value: 3
Enter a value: 3
Enter a value: 4
Enter a value: 5
Enter a value:
1, 2, 3, 3, 4 and 5

ध्यान दें कि वेरिएबल नाम camelCased के बजाय snake_cased हैं। >पायथन कोडिंग मानक

मैंने print को भी हटा दिया जो आपके commaCode फ़ंक्शन में था। यह एक साइड इफेक्ट है और आम तौर पर अवांछनीय है क्योंकि फ़ंक्शन बहु नहीं है- उद्देश्य: यह केवल सामान को स्टडआउट में प्रिंट करता है और बहुत कुछ नहीं दे सकता है। यदि आप परिणाम वापस करते हैं, तो कॉलर चुन सकता है कि इसके साथ क्या करना है (इसे प्रिंट करें, इसे उल्टा करें, इसे डेटाबेस में रखें ...)

यह भी ध्यान दें कि यदि उपयोगकर्ता कुछ भी नहीं या एक आइटम इनपुट करता है, तो आपको क्रमशः क्रैश या खराब स्वरूपित आउटपुट मिलता है। उन किनारे के मामलों को एक अभ्यास के रूप में संभालने का प्रयास करें!

2
ggorlen 11 अप्रैल 2021, 01:02
जोड़ना और कम से कम दो तत्व होने पर सशर्त होना चाहिए।
 – 
Mad Physicist
18 अगस्त 2018, 07:48
साथ ही, समस्या ऑक्सफ़ोर्ड अल्पविराम की मांग करती है
 – 
Mad Physicist
18 अगस्त 2018, 07:49

दूसरा तरीका वास्तव में कार्यक्रम में पूर्व-निर्धारित सूचियों पर एक फ़ंक्शन का उपयोग करना था।

spam = ['apples', 'bananas', 'tofu', 'cats']

otherlist = ['one', 'two', 'three', 'four', 'five']

def niceSentence(list):

    for item in list[:-1]:
        print(item + ", ", end='')

    print("and " + list[-1])

niceSentence(spam)

niceSentence(otherlist)
1
Valerie Welch 7 जिंदा 2019, 01:16

मैंने अपना दो तरीकों से किया, जिनमें से प्रत्येक में आपके द्वारा उपयोग किए जाने वाले चरण शामिल हैं। दोनों काम करते हैं, लेकिन विभिन्न स्रोतों से उनकी सूची इनपुट प्राप्त करते हैं। एक उपयोगकर्ता इनपुट मांगता है, जैसा आपने किया था। हालांकि, यह वास्तव में एक फ़ंक्शन को परिभाषित नहीं करता है; बल्कि, कार्यक्रम कार्य है। (मैंने इस दृष्टिकोण को अध्याय 4 के मध्य में "allMyCats2.py" कार्यक्रम से तैयार किया है।)

anyList = []
while True:
    print('Enter an item for your list, or hit enter to stop.')
    item = input()
    if item == '':
          break
    anyList = anyList + [item]

for item in anyList[:-1]:
    print(item + ",", end='')

print("and " + anyList[-1])
0
Valerie Welch 7 जिंदा 2019, 01:14

यह दो दृष्टिकोणों को जोड़ती है:

def niceSentence(list):
    for item in list[:-1]:
        print(item + ", ", end='')
    print("and " + list[-1])        #this defines the function that makes the comma list


anyList = []

while True:
    print('Enter an item for your list, or hit enter to stop.')
    item = input()
    if item == '':
          break
    anyList = anyList + [item]      #builds list from inputted strings

niceSentence(anyList)  #calls function on built list
0
Valerie Welch 7 जिंदा 2019, 01:24
भविष्य में, आप अपना मूल प्रश्न संपादित कर सकते हैं। आपको शायद ऐसा करना चाहिए और दो अतिरिक्त हटा दें।
 – 
juanpa.arrivillaga
7 मार्च 2019, 20:49

मैंने यह छोटा किया

spam = ['apples', 'bananas', 'tofu', 'cats']

def list_funk(theliste):
    for mot in theliste[:-1]: # first i work with index 0 to 3
        print(mot, end=', ')
    print('and ' + str(spam[-1])) # then adding what misses to complete exercise

list_funk(spam)
0
Z. Esy 7 मार्च 2019, 20:39

अल्पविराम कोड अभ्यास परियोजना के प्रश्न के लिए यह बहुत ही बुनियादी दृष्टिकोण है। उत्तर पुस्तक से प्राप्त ज्ञान का उपयोग करके अध्याय LISTS तक लिखा गया है। कोई अतिरिक्त या उन्नत अवधारणा शामिल नहीं है।

उत्तर कोड

userInput=[]
#Enter the number of total entries in the list
n =int(input("Enter the number of input elements: "))
for i in range(0,n):
    newInput=input() #This gets the list values
    userInput.append(newInput)

#Function to execute the program
def commaList(userInput):
    for i in range(len(userInput)):
        if i == len(userInput)-1:
            print(' and '+userInput[i])
        else:
            print(userInput[i], end=',')
    return
commaList(userInput)

उदाहरण

#Console Screen:
Enter the number of input elements: 4
Maths
Science
History
Music
#ProgramOutput:
Maths,Science,History, and Music

आशा है कि ये आपकी मदद करेगा।

0
Sujith Kumar 25 जून 2020, 17:41

मैंने पहले एक स्पैम सूची घोषित की, फिर अल्पविराम फ़ंक्शन को परिभाषित किया। मैंने फिर सूची के अंतिम आइटम में एक 'और' जोड़ा, फिर सूची में अंतिम आइटम से पहले प्रत्येक आइटम में अल्पविराम जोड़ने के लिए लूप के लिए उपयोग किया। यदि आइटम स्ट्रिंग डेटाटाइप नहीं थे, तो मैंने उन्हें परिवर्तित कर दिया।

क्योंकि हम सभी वस्तुओं के साथ लंबी स्ट्रिंग को प्रिंट करना चाहते थे, मैंने एक खाली स्ट्रिंग वैरिएबल स्ट्रिंगलिस्ट घोषित किया, और सभी आइटम्स को स्ट्रिंगलिस्ट में जोड़ने के लिए लूप के लिए उपयोग किया।

अंत में, मैंने स्ट्रिंगलिस्ट का प्रिंट आउट लिया।


spam = ['apples', 'bananas', 'tofu', 'cats', 8, True]  #our list

def commaCode(myList):

    myList[-1] = 'and ' + str(myList[-1])  #converted last element to string and 
                                           #added an 'and'
    for i in range(len(myList)-1):    #add a comma to every element before
        myList[i] = str(myList[i]) + ', '

    stringList = ''                 #declare an empty string variable
    for i in range(len(myList)):    #add each element to the string list
        stringList = stringList + str(myList[i]) 

    print(stringList)               #print the entire string list

commaCode(spam)
0
Paul F 16 सितंबर 2020, 17:53

ये रहा मेरा जवाब। यदि सूची खाली है तो उसे "यहां देखने के लिए कुछ नहीं" प्रिंट करना चाहिए। एक आइटम वाली सूची को केवल उस आइटम को प्रिंट करना चाहिए, और एक से अधिक लंबाई वाली सूची को वांछित परिणाम देना चाहिए। उम्मीद है कि यह सही है, किसी भी प्रतिक्रिया की सराहना करेंगे।

spam = ['pizza','tofu','boats','hoes']




   def comma_code(values):
        if len(values) < 1:
            print('Nothing to see here.')
        elif len(values) == 1:
            print(values[0])
        else:
            print(', '.join(values[:-1]) + ' and ' + values[-1])

    comma_code(spam)
0
ArjunathePrince 23 सितंबर 2020, 19:52
def list_value(s):
    while " " in s:
        s.remove(" ")
    while "" in s:
        s.remove("")
    return str(", ".join(s[:-1])) + " and " + str(s[-1])


if __name__ == "__main__":
    spam = ["apples", "bananas", "tofu", "cats"]

    spam.append("manga")
    spam.append("papayas")
    spam.append("")
    spam.append("citrus")
    spam.append(" ")
    spam.append("berries")
    spam.append("melons")
    spam.append("")
    spam.append(" ")
    spam.append(20)
    fruits = list_value(spam)

    print(fruits)
0
Lucky_ROO 18 अप्रैल 2021, 14:20
कोड केवल उत्तरों को हतोत्साहित किया जाता है। कृपया इस बात का सारांश प्रदान करें कि आपका उत्तर समस्या का समाधान कैसे करता है और यह अन्य उत्तरों के लिए बेहतर क्यों हो सकता है जो पहले ही प्रदान किए जा चुके हैं।
 – 
DaveL17
18 अप्रैल 2021, 15:48