2016-03-06 3 views
-2

Моя текущая функция проверяет, есть ли хотя бы определенное количество символов, т.е. если у меня есть квадратная сетка 3x3, она проверит, есть ли 3 символа или больше, но я хочу изменить код чтобы проверить, если его ТОЧНО 3 символа не больше.Python Проверьте точное количество символов

def double(char): 
    rows = len(char) 
    for row in char: 
     if (len(set(row)) != rows): 
      return False 
    return True 

Это отличается, когда я проверить на квадратную сетку:

def square(sq): 
    rows = len(sq) 
    for row in sq: 
     if (len(row) != rows): 
      return False 
    return True 

В моем основном коде; я поднять исключение и вызвать ошибку:

if not double(d): 
       raise ValueError 
      break 

     except ValueError: 
      if not square(d): 
       print("The format is incorrect; Has to be in a n x n square format") 
      elif not double(d): 
       print("The grid does not contain exactly n amount of characters") 
+0

Что такое 'char'? И почему вы называете функцию 'double'? –

+1

Возможный дубликат [Python - n Различные символы, используемые в сетке] (http://stackoverflow.com/questions/35803294/python-n-different-characters-used-in-a-grid) –

+0

Это был изначально мой вопрос в любом случае, это отличается от того, что он запрашивает ТОЧНУЮ проверку; плохо обновите основную запись, чтобы включить, где функция вызывается – Xrin

ответ

1

Имен вашего переменных запутанные, например, переменная char представляет square_grid, функция называется double проверяет сетка 3x3.

sg1 = ['ABC','DEF','GHI'] 
sg2 = ['WXYZ','AEIOUY'] 
sg3 = ['ABV','CAB','BCA'] 
sg4 = ['ABC','CAB','BCA'] 


def verify3x3(square_grid): 
    nb_rows = 0 
    for row in square_grid: 
    if len(row) != 3: 
     return False 
    nb_rows += 1 
    return (nb_rows == 3) 

print verify3x3(sg1) 
print verify3x3(sg2) 
print verify3x3(sg3) 
print verify3x3(sg4) 

С python2, это печатает

True 
False 
True 
True 

EDIT: Если вы хотите посчитать различные символы, и проверить, сколько есть:

def verify_3distinct_chars(square_grid): 
    chars_list = [] 
    for row in square_grid: 
    for c in row: 
     if c not in chars_list: 
     chars_list.append(c) 
    return len(chars_list) == 3 

print verify_3distinct_chars(sg1) 
print verify_3distinct_chars(sg2) 
print verify_3distinct_chars(sg3) 
print verify_3distinct_chars(sg4) 

С python2 , это отпечатки

False 
False 
False 
True 

N.b. вы могли бы написать это намного короче, но я подробно описал логические шаги.

+0

Да, это прекрасно. Мой текущий код проверяет, является ли это 3x3 или нет, но проблема в том, что если у меня есть латинская квадратная доска [ABV, CAB, BCA], у этого есть 4 символа, abc и v, если это так, то ошибка должна появиться при использовании функции , Но на данный момент он все еще печатает всю сетку. – Xrin

+0

Итак, вы хотите подсчитать, сколько различных символов в вашем массиве, а затем проверить, есть ли 3. Вы можете использовать 'list' для сбора отдельных символов. Я отредактировал свой ответ. –

+0

Точно, кроме одного фактора. Плата с латинским квадратом может варьироваться по размеру, это может быть 4x4, 5x5 и т. Д. Im экспериментирует с 3x3, но я думаю, я могу просто найти длину строки и заменить 3 на длину строки? – Xrin

0

Надеется, что это помогает:

def double(char): 
    for row in char: 
     if len(char) != 3 or len(row) != 3: 
      return False 
     else: 
      return True 
+0

Хм не совсем; если у меня есть 4 символа, то есть ABC и V, он все еще загружает код и показывает квадратную сетку. И для вашей информации я создаю латинскую квадратную доску. – Xrin

+0

Я отредактировал его сейчас, но я не совсем понимаю вас. Вы хотите проверить, все ли строки и строки длиной 3 символа или что-то еще? – Cosinux

+0

Если у меня есть латинская квадратная доска с квадратной сеткой [ABV, CBA, BCA], она имеет 4 символа вправо и представляет собой сетку 3x3. ABC и V. Однако проверка должна убедиться, что вся сетка содержит ТОЛЬКО 3 символа, если появится более или менее ошибка. Это не должно относиться только к 3х3, но к сетке n x n. Это имеет смысл? – Xrin

Смежные вопросы