Функция печати дополнительного имени - PullRequest
0 голосов
/ 05 мая 2020

Я выполняю практическую задачу, где вы случайным образом генерируете число от 1 до 100, и оно повторяется 100 раз, а затем эфир сообщает пользователю, является ли сгенерированное число простым или нет. Я полагаю, что ответил на вопрос, за исключением того, что он напечатал дополнительную строку. Не уверен, что придираюсь, потому что программа работает корректно даже с недочетом. Но я чувствую, что должен понять, почему это происходит. Любая помощь приветствуется.

import random

def main():
    number=random_number()
    prime_numbers(number)

def random_number():
    for number in range(100):
        number = random.randint(1,101)
        print(number,' ',end='')
        prime_numbers(number)
    return number



def prime_numbers(number):

    if number % 2 == 0:
        print('Not prime')
    else:
        print('Prime')
    return number
main()

 output:
 # I shortened the output for times sake it 
 # iterates 100 times. but the last line is how it 
 # prints.

30  Not prime
36  Not prime
11  Prime
11  Prime
40  Not prime
.
.
.
.
78  Not prime
67  Prime
80  Not prime
78  Not prime
90  Not prime
Prime       <------ not sure where this is coming 
                    from

Ответы [ 3 ]

1 голос
/ 05 мая 2020

Это происходит потому, что вы вызываете prime_numbers() как в main(), так и в random_number(), поэтому после того, как random_number() повторяется 100 раз, он выводит свой результат, который снова передается в prime_numbers(), даже хотя это число уже было оценено.

Простейшим решением было бы избавиться от вызова в main(), чтобы он выглядел так:

def main():
    number=random_number()

Однако я думаю он выглядит чище и имеет больше смысла в контексте имен ваших функций переместить итератор в main(), так что random_number() отвечает только за генерацию + печать случайного числа, prime_numbers() отвечает только за определение + печать если число простое, а main() оркестрирует основную идею программы. В этом случае ваш код будет выглядеть следующим образом:

import random

def main():
    for number in range(100):
        number = random_number()
        prime_numbers(number)


def random_number():
    number = random.randint(1,101)
    print(number,' ',end='')
    return number


def prime_numbers(number):
    if number % 2 == 0:
        print('Not prime')
    else:
        print('Prime')
    return number

main()

Есть и другие улучшения, которые можно сделать здесь и там, но я надеюсь, что это, по крайней мере, ответит на ваш главный вопрос!

1 голос
/ 05 мая 2020

Вы вызываете две функции в своей функции main ()

  1. number = random_numbers() Это генерирует 100 чисел путем 100 циклов, а затем возвращает последний сгенерированный номер, который назначен вашему переменная число . В этой функции что-то вроде 30 Not prime печатается 100 раз.

  2. prime_numbers(number) Последнее число, сгенерированное random_numbers(), присваивается переменной number , которая передается в функцию prime_numbers(number). Это напечатает последнюю строку Prime или Not Prime

Нет необходимости снова вызывать функцию prime_numbers(number).
Вызов функции random_numbers() только функция решает вашу проблему

0 голосов
/ 06 мая 2020

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

import random

def main():
    for number in range(100):
        number = gen_random()
        prime_numbers(number)


def gen_random():
    number = random.randint(1,101)
    print(number,'', end='')
    return number

def prime_numbers(number):

    is_prime = True

    for y in range (2,number):
        if number % y == 0:
            is_prime=False

    if is_prime == True:
        print("Prime")
    else:
        print("Not Prime")

main()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...