2016-01-19 5 views
1

Я пробовал упражнение с упражнениями из hacerrank Click Не знаю, как добавить эти правила:
► У него могут быть цифры в группах по 4, разделенные одним дефисом «-».
► У него НЕ должно быть 4 или более последовательных повторных цифр.
Как добавить характеристики проверки/правила?

Вот мой код:

how_many=1 #This version for tests, Here will be input() 
for i in range(how_many): 
    string=input() 
    formated_str=''.join(string.split('-', 4)) 
    if (char.isdigit() for char in formated_str) and len(formated_str)==16 and (formated_str[0]=='4' or formated_str[0]=='5' or formated_str[0]=='6'): 
     print("Valid") 
    else: 
     print("Invalid") 

Проблемы:

Я не знаю, что formated_str=''.join(string.split('-', 4)) будет работать, как они хотят, я имею в виду «► Это может иметь цифры в группах по 4, разделенных одним дефис "-". " А как реализовать это второе правило?

ответ

2

Функция внизу сначала удаляет - внутри вашей строки кода, а затем проверяет повторение цифр. Регулярное выражение следующее: r"\d*(\d)\1{3,}\d*". Если регулярное выражение совпадает, поэтому код недействителен и функция возвращает False. В противном случае функция разбивает исходную строку кода, а затем проверяет длину каждой подстроки.

import re 

string = "2134-4444-4412-3241" 
string1 = "2134-4344-4412-3241" 
string2 = "2134-4342-4412-3241" 

def isValid(aString): 
    pattern = r"\d*(\d)\1{3,}\d*" 
    isValid = True 

    rep_string = aString.replace('-', "") 
    print(rep_string) 
    if (not re.search(pattern, rep_string)): 
     splitted = string.split('-') 
     for split in splitted: 
      if (len(split)!=4): 
       return(False) 
     return(isValid) 
    else: 
     return(False) 

print(isValid(string)) 
print(isValid(string1)) 
print(isValid(string2)) 

Я надеюсь, что это решение поможет вам. Этот фрагмент кода даст вам следующий результат:

False 
False 
True