Как умножить два случайно сгенерированных числа, пока они не будут равны 0? - PullRequest
0 голосов
/ 18 июня 2019

Мне нужно сгенерировать 2 случайных числа в диапазоне от -5 до 5, затем умножать их до тех пор, пока не получится итерация, в которой произведение будет равно 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")

Проблема в том, что код работает бесконечно.

Я все еще очень неопытен в циклах и хотел бы, чтобы кто-нибудь помог мне найти мою ошибку.

Ответы [ 4 ]

1 голос
/ 18 июня 2019

Вот один из способов сделать это:

import random

num1 = random.randint(-5, 4)
num2 = random.randint(-5, 4)
counter = 1

while num1 * num2: 
#while will iterate until the condition is not true, in python 0 is equivalent to false.
    num1 = random.randint(-5, 4)
    num2 = random.randint(-5, 4)
    counter += 1

print("Took this many iterations: ", counter)

Пример без инициализации num1 и num2

import random

counter = 1

while random.randint(-5, 4) * random.randint(-5, 4):
    counter += 1

print("Took this many iterations: ", counter)
0 голосов
/ 18 июня 2019

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 голосов
/ 18 июня 2019

Вы генерируете одну пару чисел и используете этот продукт для запуска вашего цикла.Поскольку продукт не может измениться, это бесконечный цикл.Попробуйте это:

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 голосов
/ 18 июня 2019

Ваша ошибка в том, что вы рассчитали только одну "итерацию" и сохранили ее результат в 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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...