(Python noob) Строка чисел разбивается на цифры при добавлении ее в список - PullRequest
0 голосов
/ 23 апреля 2020

Я пытаюсь найти четное в списке шансов или нечетное в списке четных. Вот что у меня есть:

def even_odd_finder(numbers):
    numlist = numbers.split()
    evens = []
    odds = []
    for m in numlist:
        n = int(m)
        if n % 2 != 0:
            odds += str(n)
        else:
            evens += str(n)
    if len(evens) > len(odds):
        this_one = odds[0]
        odd_ind = numlist.index(this_one)
        return "Entry  " + str(odd_ind + 1) + " is odd."
    else: 
        no_this_one = evens[0]
        even_ind = numlist.index(no_this_one)
        return "Entry " + str(even_ind + 1) + " is even."

Это прекрасно работает, когда я передаю ему строку из одного целого числа di git.

print(even_odd_finder("1 2 5 7 9"))
print(even_odd_finder("2 4 6 7 8")) 
print(even_odd_finder("88 96 66 51 14 88 2 92 18 72 18 88 20 30 4 82 90 100 24 46"))

На третьем, хотя Я заметил, что получаю ValueError: '5' is not in list, потому что, когда числа двойных ди git попадают в списки четных и шансов, они разбиваются дальше на свои цифры. "8" и "8" ставятся в четные, а не "88", поэтому первая запись в списке шансов odds[0] будет '5', а не '51'. Я не могу понять, почему.

1 Ответ

0 голосов
/ 23 апреля 2020

Если у вас есть список чисел, лучше обрабатывать его как список чисел.

  • списки полезны, используйте их
    • не нужно строить строка чисел через stringofnumber += str(n)
    • изменить evens и odds на списки

I рефакторинг ваш код немного:



def even_odd_finder(numbers):
    numlist = [int(n) for n in numbers.split()]
    evens = []
    odds = []
    for n in numlist:
        if n % 2 != 0:
            odds.append(n)
        else:
            evens.append(n)

    if len(evens) > len(odds):
        this_one = odds[0]
        odd_index = numlist.index(this_one)
        return f"Entry {odd_index + 1} is odd."
    else: 
        no_this_one = evens[0]
        even_index = numlist.index(no_this_one)

def even_odd_finder(numbers):
    numlist = [int(n) for n in numbers.split()]
    evens = []
    odds = []
    for n in numlist:
        if n % 2 != 0:
            odds.append(n)
        else:
            evens.append(n)

    if len(evens) > len(odds):
        this_one = odds[0]
        odd_index = numlist.index(this_one)
        return f"Entry {odd_index + 1} is odd."
    else: 
        no_this_one = evens[0]
        even_index = numlist.index(no_this_one)
        return f"Entry {even_index + 1} is even."
        return f"Entry {even_index + 1} is even."

ПРИМЕЧАНИЕ: вы все равно получите ошибку, если events или odds пусто

С точки зрения удобства использования кода, Я бы очистил ваш ввод перед обработкой вашей функцией. Другими словами, преобразуйте вашу строку чисел в список до , передавая его вашей функции. Это обеспечивает лучшее разделение проблем для лучшего кода.

...