Как исправить 'TypeError: не все аргументы, преобразованные во время форматирования строки' в Python - PullRequest
0 голосов
/ 29 апреля 2019

Я пытаюсь создать код для получения двух ключей от мастер-ключа. Ключ должен быть строкой. Для первого вы должны взять четное число, а для второго - число шансов. Например: главный ключ = 18923. Первый ключ = 82, второй ключ = 193.

Я новичок в Python.

masterKey = '18293'
firstKey = ''
secondKey = ''

masterKeyList = list(masterKey)
firstKeyList = list(firstKey)
secondKeyList = list(secondKey)

for digit in masterKeyList:
    **if digit % 2 == 0:** *<--- here is the error*
        firstKeyList.append(digit)
    else:
        secondKeyList.append(digit)


 *if digit % 2 == 0: <--- Error message
    TypeError: not all arguments converted during string formatting*

Я хочу знать, почему это происходит, и решение. Спасибо!

Ответы [ 4 ]

1 голос
/ 29 апреля 2019

Это можно упростить и сократить, используя списки и join(), если вам нужно strings. Если вы предпочитаете lists, просто удалите join(). Вы можете сделать что-то вроде следующего:

masterKey = '18293'
firstKey  = "".join([e for e in masterKey if int(e) % 2 == 0])
secondKey = "".join([e for e in masterKey if int(e) % 2 != 0])
1 голос
/ 29 апреля 2019

digit - это строка в вашем коде, поэтому, если вы хотите применить модуль 2, вам нужно преобразовать ее в число.Это должно работать нормально:

masterKey = '18293'
firstKey = ''
secondKey = ''

masterKeyList = list(masterKey)
firstKeyList = list(firstKey)
secondKeyList = list(secondKey)

for digit in masterKeyList:
    if int(digit) % 2 == 0: <--- fixed
        firstKeyList.append(digit)
    else:
        secondKeyList.append(digit)
1 голос
/ 29 апреля 2019

digit - это строка.Просто введите его, используя int():

if not int(digit) % 2:

Причина вашей ошибки в том, что оператор модуля является также оператором форматирования строки, но вы не предоставили необходимые аргументы для строкового формата '2'

Этот цикл for будет работать:

for digit in masterKeyList:
    if not int(digit) % 2:
        firstKeyList.append(digit)
    else:
        secondKeyList.append(digit)
1 голос
/ 29 апреля 2019

Эта ошибка возникает из-за того, что digit является строкой, а % в контексте строк является оператором формата.

Чтобы исправить это, конвертируйте его в целое число:

...
if int(digit) % 2 == 0:
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...