मुझे श्रेणी -5 से 5 तक यादृच्छिक रूप से 2 संख्याएं उत्पन्न करने की आवश्यकता है, फिर उन्हें तब तक गुणा करें जब तक कि मुझे एक पुनरावृत्ति न मिल जाए जहां उत्पाद 0 है। फिर परिणाम प्राप्त करने के लिए लूप की मात्रा मुद्रित करें।

मैंने for और while लूप का उपयोग करने की कोशिश की है, और इसके साथ आया:

import random
num1 = random.randint(-5, 4)
num2 = random.randint(-5, 4)
print("Generated number 1: ", num1)
print("Generated number 2: ", num2)
product = num1 * num2
print("Product result: ", product)
while product != 0:
    print("Failed iteration")
else:
    print("Successful iteration")

समस्या यह है कि कोड असीम रूप से चलता है।

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

0
Nicolas Rowe 18 जून 2019, 02:39

3 जवाब

सबसे बढ़िया उत्तर

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

import random

product = 10000  # Dummy value to get into the loop.

while product != 0:
    num1 = random.randint(-5, 4)
    num2 = random.randint(-5, 4)
    print("Generated number 1: ", num1)
    print("Generated number 2: ", num2)
    product = num1 * num2
    print("Product result: ", product)
    if product != 0:
        print("Failed iteration")

else:
    print("Successful iteration")
0
Prune 17 जून 2019, 23:46

आपकी गलती यह है कि आपने केवल एक "पुनरावृत्ति" की गणना की और उसके परिणाम को product में संग्रहीत किया। यदि आप गणना दोबारा नहीं करते हैं तो यह नहीं बदलेगा।

मूल रूप से, आपको गणना को लूप में रखना होगा। आप अपने मूल while product != 0 का उपयोग कर सकते हैं, लेकिन फिर आपको लूप के बाहर पहले उत्पाद और लूप के अंदर के उत्पादों की गणना करनी होगी, जिससे डुप्लिकेट कोड हो जाएगा। इसलिए, मैंने एक अनंत लूप (while True) पर स्विच किया, जहां से हम break सफलता प्राप्त करने पर।

import random

while True:
    num1 = random.randint(-5, 4)
    num2 = random.randint(-5, 4)
    print("Generated number 1: ", num1)
    print("Generated number 2: ", num2)
    product = num1 * num2
    print("Product result: ", product)

    if product == 0:
        print("Successful iteration")
        break
    else:
        print("Failed iteration")
0
snwflk 17 जून 2019, 23:43

random.randint(a, b) एक यादृच्छिक पूर्णांक N देता है जैसे कि a <= N <= b
random.randrange(a, b) एक यादृच्छिक पूर्णांक N देता है जैसे कि a <= N < b
< और <= के बीच अंतर नोट करें

यदि आप -5 से 5 (समावेशी) तक की संख्या चाहते हैं तो आपको चाहिए...
randint(-5, 5)
या
randrange(-5, 6)
लेकिन नहीं
randint(-5, 4)

निम्नलिखित कोड आपके लक्ष्य को पूरा करेगा:

import random
iteration_number = 0
while True:
    iteration_number += 1
    num1 = random.randint(-5, 5)
    num2 = random.randint(-5, 5)
    print("Generated number 1: ", num1)
    print("Generated number 2: ", num2)
    product = num1 * num2
    print("Product result: ", product)
    if product == 0:
        break # exit the loop
print("We iterated", iteration_number, "times.")

हालांकि उपरोक्त कोड काम करता है, यह बदसूरत है। ऐसा इसलिए है क्योंकि यह एक बार बड़े पैमाने पर लिपि है, इसके बजाय अलग-अलग कार्यों में विभाजित नहीं है। नीचे दिया गया कोड समान अंतिम परिणाम प्राप्त करता है, लेकिन पढ़ने, समझने और संशोधित करने में आसान है:

import random

def gen_once():
    """
    generate data once
    """
    num1 = random.randint(-5, 5)
    num2 = random.randint(-5, 5)
    return num1, num2

def test_once(num1, num2):
    if num1 * num2 == 0:
        return True
    return False

def gen_and_test_once():
    num1, num2 = gen_once()
    return test_once(num1, num2)

def gen_and_test_many():
    iteration_number = 0
    while True:
        iteration_number += 1
        test_result = gen_and_test_once()
        if product == 0:
            return iteration_number

iteration_count = gen_and_test_many()
print("We iterated", iteration_count, "times.")
0
Toothpick Anemone 18 जून 2019, 00:11