Учитывая следующие данные:
diccionario_datos_clientes = [
{"Name": "Marcos", "Age": 23, "Ranking": 14, "Contact":{ "Work": 99000001, "Personal": 7222003}},
{"Name": "Hugo", "Age": 26, "Ranking": 83, "Contact": { "Work": 99000002, "Personal": 97220042}},
{"Name": "Manuel", "Age": 13, "Ranking": 2, "Contact": { "Work": 99000003, "Personal": 47220003}},
{"Name": "Maria", "Age": 66, "Ranking": 7, "Contact": { "Work": 99000004, "Personal": 47220004}},
{"Name": "Itziar", "Age": 20, "Ranking": 23, "Contact": { "Work": 99000005, "Personal": 47220005}}
]
Я должен убедиться, что личный контакт действителен. Условия следующие:
Если номер недействителен, я должен добавить имя и рабочий контакт в список.
Я смог выполнить первые 2 условия, но у меня проблемы с третьим.
dic_llamar=[]
for dic in diccionario_datos_clientes:
if len(str(dic['Contact']['Personal']))<8:
dic_llamar.append((dic['Name'],dic['Contact']['Work']))
elif int(str(dic['Contact']['Personal'])[0])!=4:
dic_llamar.append((dic['Name'],dic['Contact']['Work']))
Спрашивайте сразу, если что-то непонятно!
@CeliusStingher позволь мне попробовать, и я вернусь к тебе! И да, чтобы он был действительным, он должен одновременно выполнять 3 условия.
@CeliusStingher Это сработало! Так что спасибо!
Без проблем! Не стесняйтесь проверить мой ответ и принять его, если он поможет вам решить проблему! :)
Я считаю, что это поможет вам решить проблему, я указываю все три условия, которые необходимо выполнить в if
:
for dic in diccionario_datos_clientes:
s = str(dic['Contact']['Persona'])
if (len(s) >=8) & (s[0]=='4') & (s[4:7] == '000'):
print("Valid contact!")
else:
print("Not valid contact!")
dic_llamar.append((dic['Name'],dic['Contact']['Work']))
Таким образом, если все условия соблюдены, вы получите действительный контакт, в противном случае недействительный контакт. Конечно, вы можете изменить это в соответствии с вашими потребностями.
Отлично! Спасибо за помощь!
есть ли смысл повторять одно и то же столько раз?
Вы бы предпочли определить переменную и оценить ее?
@CeliusStingher, конечно, зачем мне делать то же самое 3 раза?
Что ты делаешь "одно и то же" 3 раза?
в вашем коде это str(dic['Contact']['Personal'])
Спасибо, кажется, на этот раз я понял :)
ну, если мы придирчивы, вы используете &
, который является битовым оператором, вы должны использовать and
, который является логическим оператором, а также коротким замыканием
Последнее условие
if str(dic['Contact']['Personal'])[4:7] == '000':
Кстати, будет лучше, если вы используете только один, если:
condiction1 = len(str(dic['Contact']['Personal'])) == 8
condiction2 = str(dic['Contact']['Personal'])[0] == '4'
condiction3 = str(dic['Contact']['Personal'])[4:7] == '000'
if not (condiction1 or condiction2 or condiction3):
append(...)
Я думаю, что лучше извлечь это в свою собственную функцию
def isValid(number):
"""take a number and said if is a valid contact number"""
s = str(number)
return len(s)>=8 and s[0]= = "4" and s[4:7]= = "000"
(Я не понимаю, почему другие повторяют одно и то же столько раз)
Поместив его в собственную функцию, легче проверить, работает ли он (поскольку его можно протестировать индивидуально), и при необходимости его легче использовать в других частях вашего проекта.
И используйте его как
for dic in diccionario_datos_clientes:
if isValid(dic['Contact']['Personal']):
#do something
else:
#do something else
и чище и красивее
Третьим будет:
str(dic['Contact']['Personal'])[4:7] == '000'
а также, чтобы контакт был действительным, должен ли он одновременно выполнять ВСЕ условия?