Помогите,покажите мои ошибки

Дана строка, в которой встречаются натуральные шестнадцатеричные числа. Их запись начинается с 0x и использует большие латинские буквы (например, 0x1A).

Других чисел в строке нет. К сожалению, некоторые числа записаны неправильно - пропущен префикс "0x". Но может быть и обратная ситуация, после "0x" записано не число.

Ваша задача выделить все шестнадцатеричные числа из строки, дописав, где необходимо пропущенный префикс "0x".

Входные данные: 0x111 0xQWERTY 123 0xa 00 Выходные данные: 0x111 0x123 0x00

Мой код:

j = 0

for chyslo in range(0,len(chysla_dlya_vvoda)):
    simvol = chysla_dlya_vvoda[j]
    if simvol.find("0x") == -1:
        chysla_dlya_vvoda[j] = "0x" + simvol
        j += 1
    else:
        j += 1
        if simvol[2] != '1' or simvol[2] != '2' or simvol[2] != '3' or simvol[2] != '4' or simvol[2] != '5' or simvol[2] != '6' or simvol[2] != '7' or simvol[2] != '8' or simvol[2] != '9' or simvol[2] != '0' or simvol[2:].islower():
            chysla_dlya_vvoda.remove(simvol)
            j -= 1
print(*chysla_dlya_vvoda)

4/11 пройдено, Ошибка PE


Ответы (1 шт):

Автор решения: MBo

Думаю, учебное задание стоит решить простыми средствами, без регулярок и с примитивными проверками.

s = '0x111 0xQWERTY 123 0xa 00'

#допустимые символы
hexs = '0123456789ABCDEF'

#разделим строку по пробелам, получим список слов
nums = s.split()

for x in nums:
    #если слово начинается с hex-префикса, обрежем его
    if x.startswith('0x'):
        x = x[2:]

    #если в слове ещё что-то осталось, предполагаем, что оно хорошее  
    goodhex = len(x)>0
   
    for c in x:
        #проверяем каждый символ
        if not c in hexs:
            #плохое слово, дальше не проверяем
            goodhex = False
            break

    if goodhex:
        print('0x'+x)
→ Ссылка