Помогите,покажите мои ошибки
Дана строка, в которой встречаются натуральные шестнадцатеричные числа. Их запись начинается с 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)