मैं अपने छोटे से सरल गणित का अभ्यास करने के लिए इस कोड को बनाने की कोशिश करता हूं और मैं उपयोगकर्ता को हल करने के लिए 3 समस्याएं देना चाहता हूं, लेकिन कार्यक्रम समस्याओं का यादृच्छिक समय चलाता है। मैंने क्या गलत किया है? धन्यवाद

import random

for i in range(3):             # number of problems          

    for n in range(999):
        num1 = random.randrange(11)
        num2 = random.randrange(11)
        if num1<num2:
            break
        else:
            sum = eval(input("how much is {} - {} = ".format(num1,num2)))
            if sum == num1 - num2:
                print ("Good job!")
                break      

        for x in range(5):           #nr of wrong tries     
            if sum != num1 - num2:
                sum = eval(input("Try again {} - {} = ".format(num1,num2)))
            else:
                print ("Good job!")
                break
-2
Klod 30 जिंदा 2017, 22:15
1
आपने यह नहीं बताया कि आपका प्रश्न क्या है। आप अपने कार्यक्रम को क्या करना चाहते हैं, और इसके बजाय यह क्या कर रहा है?
 – 
BrenBarn
30 जिंदा 2017, 22:17
HI, जैसा मैंने कहा, मैं चाहता हूं कि प्रोग्राम इस तरह से उपयोगकर्ता को 3 अलग-अलग समस्याएं दें: 2-2 कितना है = 3-2 कितना है = 6-1 कितना है = लेकिन यह 2 या 1 या 0 देता है समस्याएं और कभी-कभी 3 समस्याएं भी
 – 
Klod
30 जिंदा 2017, 22:21
1
यदि num1 < num2 सत्य है तो आप लूप के लिए आंतरिक से बाहर निकल जाएंगे, इसलिए यह 3 या उससे कम प्रश्न चलाएगा। break के बजाय continue का उपयोग करें, या इससे भी बेहतर, while लूप का उपयोग करें। while लूप का उपयोग तब तक लूपिंग के लिए किया जाता है जब तक कि कोई शर्त पूरी नहीं हो जाती है, जबकि for लूप का उपयोग तब किया जाता है जब आप जानते हैं कि आप कितनी बार लूप करना चाहते हैं।
 – 
Ted Klein Bergman
30 जिंदा 2017, 22:24

4 जवाब

निम्नलिखित काम करना चाहिए

import random

for i in range(3):             # number of problems          
    num1 = random.randrange(11)
    num2 = random.randrange(11)

    while num1<num2:
        num1 = random.randrange(11)
        num2 = random.randrange(11)

    sum = input("how much is {} - {} = ".format(num1,num2))

    for x in range(5):           #nr of wrong tries     
        if sum != num1 - num2:
            sum = input("Try again {} - {} = ".format(num1,num2))
        else:
            print ("Good job!")
            break

मैंने अभी-अभी एक अवांछित for लूप और if स्टेटमेंट को while से बदल दिया है।

1
Jithin Pavithran 30 जिंदा 2017, 22:31
2
आपने जो किया उसके बारे में कुछ और स्पष्टीकरण प्रश्नकर्ता के लिए उपयोगी होगा।
 – 
Aryaman
30 जिंदा 2017, 22:34

आपकी मुख्य समस्या आपके कार्यक्रम की संरचना है, यह भ्रामक है, यही कारण है कि आप यहाँ हैं, और त्रुटि प्रवण, यह भी कि आप यहाँ क्यों हैं।

इस छद्म कोड की तरह कुछ कोशिश करें:

loop three times
  num1 = -1
  num2 = 0
  while(num1 < num2)
    assign random numbers to num1 and num2
  end loop

  input = ask user what num2 - num1 is

  if input == num2 - num1
    print 'yay'
  else
    print 'boo'
  end if

end loop

यह चीजों को साफ करता है और उन ब्रेक से छुटकारा दिलाता है।

0
Ray Stojonic 30 जिंदा 2017, 22:47

यदि num1 < num2 सत्य है, तो आप लूप के लिए आंतरिक से बाहर निकल जाएंगे, इसलिए यह इस पर निर्भर करता है कि num1 < num2 कितनी बार True है, यह 3 या उससे कम प्रश्न चलाएगा। सबसे तेज़ समाधान उस if ब्लॉक के अंदर break को continue में बदलना होगा।

हालांकि, while लूप का उपयोग करना बेहतर है जब आप नहीं जानते कि आप कितनी बार लूप करना चाहते हैं, और केवल एक निश्चित शर्त पूरी होने पर ही रुकना चाहते हैं। आपके मामले में आप num1 > num2 तक लूप करना चाहते हैं, और फिर प्रश्न पूछें।

एक बेहतर समाधान यह होगा कि 1-10 के बीच एक यादृच्छिक संख्या num1 उत्पन्न की जाए और फिर 0-num1 के बीच एक यादृच्छिक संख्या num2 उत्पन्न की जाए, जो हमेशा सुनिश्चित करेगी num1 num2 से बड़ा है।

अंतिम नोट:

  • इनपुट को एक पूर्णांक में बदलने के लिए eval के बजाय int का उपयोग करें।
  • sum एक अंतर्निहित फ़ंक्शन है, इसलिए किसी अन्य नाम का उपयोग करें ताकि आप इसे छाया न दें।

यहाँ एक कार्यशील उदाहरण है:

import random

for i in range(3):
    num1 = random.randrange(1, 11)  # Has to be greater than 0 so num2 can be less.
    num2 = random.randrange(num1)

    # Use 'int' to convert to int, not 'eval'!
    # Also, 'sum' is a built-in function. Don't shadow it, use another name.
    result = int(input("how much is {} - {} = ".format(num1, num2)))  

    for x in range(5):  # nr of wrong tries     
        if result != num1 - num2:
            result = int(input("Try again {} - {} = ".format(num1, num2)))
        else:
            print("Good job!")
            break

आप यह सुनिश्चित करने के लिए एक try-catch ब्लॉक जोड़कर इस पर विस्तार कर सकते हैं कि इनपुट वास्तव में एक संख्या है। यदि आप अंकों के अलावा कुछ भी इनपुट करते हैं तो प्रोग्राम क्रैश हो जाएगा। यहां बताया गया है कि आप इनपुट को कैसे सत्यापित कर सकते हैं।

0
Community 23 मई 2017, 13:29
आपके उत्तरों के लिए सभी का धन्यवाद टेड क्लेन बर्गमैन आपका हाजिर है, बहुत जानकारीपूर्ण है और यह मेरे इरादे के अनुसार काम करता है धन्यवाद
 – 
Klod
30 जिंदा 2017, 23:00

आपको रेंज को ठीक करने की जरूरत है।

श्रेणी में i के लिए यादृच्छिक आयात करें(1, 4):

for n in range(1, 1000):
    num1 = random.randrange(11)
    num2 = random.randrange(11)
    if num1<num2:
        break
    else:
        sum = eval(input("how much is {} - {} = ".format(num1,num2)))
        if sum == num1 - num2:
            print ("Good job!")
            break      

    for x in range(5):           #nr of wrong tries     
        if sum != num1 - num2:
            sum = eval(input("Try again {} - {} = ".format(num1,num2)))
        else:
            print ("Good job!")
            break
0
Zachary Allwein 31 जिंदा 2017, 01:48