2015-10-17 8 views
8

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

total = 0 
print("Enter a number or 0 to quit: ") 
while True: 
    number = int(input("Enter a number or 0 to quit: ")) 
    print("Enter a number or 0 to quit: ") 
    if number == 0: 
     break 
     total = total + number 
     print ("The total number is", total) 

फिर भी जब मैं इसे चलाने के लिए, यह कुल संख्या के बाद मैं 0 दर्ज मुद्रित नहीं करता है। यह सिर्फ "Enter a number or 0 to quit" प्रिंट करता है, हालांकि यह अनंत लूप नहीं है।

उत्तर

5

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

while True: 
    if <condition>: 
     break 

बजाय:

while <opposite condition>: 

आप इस के लिए एक कारण हो सकता है, लेकिन यह कोड हमें दी गई से दिखाई नहीं है। यदि हम बाद की संरचना का उपयोग करने के लिए अपना कोड बदलते हैं, तो वह अकेले प्रोग्राम को सरल बना देगा और मुख्य समस्या को ठीक करेगा। आप "Enter a number or 0 to quit:" कई बार प्रिंट भी करते हैं, जो अनावश्यक है। आप इसे input पर पास कर सकते हैं और यह पर्याप्त है।

total = 0 
number = None 
while number != 0: 
    number = int(input("Enter a number or 0 to quit: ")) 
    total += number # Same as: total = total + number 
print("The total number is", total) 

केवल "नकारात्मक पक्ष यह है" (सिर्फ सौंदर्य प्रसाधन) है कि हम पाश से पहले number परिभाषित करने की जरूरत है।

भी ध्यान दें कि हम पूरे पाश के बाद total संख्या प्रिंट करना चाहते हैं समाप्त हो गया है, इस प्रकार अंत में प्रिंट इंडेंट नहीं की गई है और while पाश के हर चक्र पर निष्पादित नहीं किया जाएगा।

+3

यह, और अन्य उत्तरों, इस तथ्य का लाभ उठाते हैं कि सेंटीनेल मान 0 है, और इस प्रकार यह बिना शर्त रूप से इनपुट नंबर जोड़ना सुरक्षित है, और अगर लूप को बाहर निकलना चाहिए तो बाद में जांचें। यह काम करता है, लेकिन शायद यह थोड़ा सा चालाक है - अगर सेंटीनेल मूल्य किसी दिन बदलने के लिए बदल गया था, तो कहें, -1, यह याद रखना आसान हो सकता है कि हमें केवल 'संख्या! = 0'' परीक्षण नहीं करना होगा 'संख्या! = -1', लेकिन वास्तव में लूप की पूरी संरचना को बदल दें। –

+0

धन्यवाद, यह काम किया! –

2
total = 0 
while True: 
    number = int(input("Enter a number or 0 to quit: ")) 
    if number == 0: 
     break 

    total = total + number 

print("The total number is", total) 

आप अपने अन्य कोड से पहले break डाल, तो पाश समाप्त हो जाएगा और उस break के बाद अपने कोड नहीं चलेगा।

और वैसे, आप try...except उपयोग कर सकते हैं, तो उपयोगकर्ता एक नंबर नहीं डाला त्रुटि को पकड़ने के लिए:

total = 0 
while True: 
    try: 
     number = int(input("Enter a number or 0 to quit: ")) 
    except ValueError: 
     print('Please enter a number') 
     continue 

    if number == 0: 
     break 

    total = total + number 

print("The total number is", total) 
+0

आप _could_ '''' लूप के बाहर' प्रिंट' भी डालते हैं ... –

+0

@ पीएम 2Ring लेकिन इससे कोई फर्क नहीं पड़ता? :) –

+1

सही। कोई फर्क नहीं पड़ता कि। लेकिन कुछ इनपुट प्रसंस्करण पाश के बाहर प्रिंटिंग करने के लिए बेहतर शैली पर विचार कर सकते हैं। एक और मामूली सुधार 'if' test के बाद जोड़ना है। निश्चित रूप से, शून्य जोड़ना कुछ भी नहीं बदलेगा, और यह केवल एक बर्बाद निर्देश है, लेकिन कोड को अलग-अलग क्रमबद्ध करके इसे टालना आसान है जब बेकार सामान करने से बचने के लिए बेहतर शैली है। –

2

संख्या 0 है, तो पहली बात आप कर रहे हैं break है, जो होगा लूप खत्म करो।

आप कुल मिलाकर संख्या को तब तक नहीं जोड़ रहे हैं जब तक कि यह 0 न हो, जो आप के बाद नहीं हैं।

while True: 
    number = int(input("Enter a number or 0 to quit: ")) 
    total = total + number 
    if number == 0: 
     break 
print ("The total number is", total)  
3

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

total = 0 
while True: 
    number = int(input("Enter a number or 0 to quit: ")) 
    total = total + number 
    if number == 0: 
     break 

print ("The total number is", total) 
2

आप बहुत निकट थे, लेकिन आपके पास कुछ इंडेंटेशन समस्या थी।

सबसे पहले, इन सभी print कथन क्यों? मुझे लगता है कि आप इनपुट लेने से पहले इसे प्रिंट करने की कोशिश कर रहे हैं। इसके लिए, नीचे की रेखा पर्याप्त होगी।

number = int(input("Enter a number or 0 to quit: ")) 

दूसरे, आप क्या करना चाहते हैं के बीच अंतर, जब केवल number==0 और क्या हर यात्रा में करने के लिए।

आप प्रत्येक पुनरावृत्ति में नीचे दिए गए निर्देश का उपयोग करना चाहते हैं क्योंकि आप total के साथ प्रत्येक नंबर को जोड़ना चाहते हैं। तो, इसे if ब्लॉक से बाहर रखें।

total = total + number 

और जब number==0, आपको पहले print कुछ करना चाहते हैं और फिर break पाश।

if number == 0: 
     print ("The total number is", total) 
     break 

सुनिश्चित करें कि आप total पहले और उसके बाद if हालत जाँच, क्योंकि एक बार आप पाश को तोड़ने, तो आप सिर्फ नहीं नंबर बाद में कुल जोड़ सकते हैं के साथ जोड़ रहे हैं सुनिश्चित करें।

तो, समाधान की तरह हो सकता है,

total = 0 
while True: 
    number = int(input("Enter a number or 0 to quit: ")) 
    total = total + number 
    if number == 0: 
     print ("The total number is", total) 
     break 
+0

@ पीएम 2 रिंग, धन्यवाद, तय। –

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