Список с функцией odd_even - PullRequest
0 голосов
/ 06 июля 2019

Когда моя программа напечатает 10 случайных чисел, она должна напечатать что-то вроде этого.(Эти цифры 3, 7 и 10 используются только в качестве примера.)

В списке было 3 чета и 7 шансов

3-й элемент в отсортированных числах10

По какой-то причине это не происходит для меня.Вот код, который у меня есть:

import random

nums =[]

for i in range (1,11):
    x = random.randint(1,50)
    nums.append(x)

print(nums)

nums.sort()

print(nums)

start = nums[0:5]

print(start)

finish = nums[7:10]

print(finish)

def evenOdd(num):
    odd = 0
    even = 0
    for x in num:
        if (x % 2 == 0):
            even += 1
    else:
        odd += 1

print('List had', even, 'evens and', odd, 'odds')

print('The 3rd element in sorted nums is', num[2])

Когда я его запускаю, программа выводит на экран следующее:

Traceback (most recent call last):
[7, 21, 6, 14, 22, 8, 24, 20, 26, 27]
 line 35, in <module>
[6, 7, 8, 14, 20, 21, 22, 24, 26, 27]
print('List had', even, 'evens and', odd, 'odds')
[6, 7, 8, 14, 20]
NameError: name 'even' is not defined
[24, 26, 27]
Process finished with exit code 1

Ответы [ 4 ]

2 голосов
/ 06 июля 2019

У вас есть ряд проблем в вашем коде.Вы на самом деле не вызываете функцию evenOdd, если вы ее вызывали, вы не предоставили способ получить ее результаты, и у вас есть некоторые несоответствия имен переменных.Кроме того, ваша evenOdd() функция работала неправильно, потому что предложение else должно иметь отступ, чтобы быть внутри цикла for.Как и в вашей версии, odd всегда будет 1:

Вот код, который устраняет все эти проблемы:

import random

nums =[]

for i in range (1,11):
    x = random.randint(1,50)
    nums.append(x)

print(nums)

nums.sort()

print(nums)

start = nums[0:5]

print(start)

finish = nums[7:10]

print(finish)

def evenOdd(num):
    odd = 0
    even = 0
    for x in num:
        if (x % 2 == 0):
            even += 1
        else:
            odd += 1
    return even, odd

even, odd = evenOdd(nums)

print('List had', even, 'evens and', odd, 'odds')

print('The 3rd element in sorted nums is', nums[2])

Главное здесь заключается в том, что evenOddФункция возвращает «кортеж», который содержит результирующие числа нечетных и четных чисел, так что вы можете использовать их вне функции.

Пример результата:

[2, 36, 20, 32, 6, 40, 39, 27, 24, 47]
[2, 6, 20, 24, 27, 32, 36, 39, 40, 47]
[2, 6, 20, 24, 27]
[39, 40, 47]
('List had', 7, 'evens and', 3, 'odds')
('The 3rd element in sorted nums is', 20)
1 голос
/ 06 июля 2019

Я предполагаю, что последние операторы print должны быть в вашей функции evenOdd, и в этом случае ваш код не имеет правильного отступа.Это должно быть так:

def evenOdd(num):
    odd = 0
    even = 0
    for x in num:
        if (x % 2 == 0):
            even += 1
        else:
            odd += 1
    print('List had', even, 'evens and', odd, 'odds')

    print('The 3rd element in sorted nums is', num[2])

После этого вы можете вызвать функцию следующим образом:

evenOdd(nums)
0 голосов
/ 06 июля 2019

Вы также можете использовать это: -

import random

nums =[random.randint(1,51,) for var in range(1,11)]  # creating nums list by short method
nums.sort()
print(nums)

def evenOdd(num):
    odd = 0
    even = 0
    for x in num:
        if (x % 2 == 0):
            even += 1
    else:
        odd += 1
    return even,odd

even,odd = evenOdd(nums)
print('List had', even, 'evens and', odd, 'odds')
print('The 3rd element in sorted nums is', nums[2])

Я надеюсь, что вы узнаете что-то новое.

0 голосов
/ 06 июля 2019

Определите переменные even и odd глобально - они доступны только внутри функции.

even = 0
odd = 0

# ...

def evenOdd(num):
    global even
    global odd
    even = 0
    odd = 0
    # ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...