Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
1 / 0 / 1
Регистрация: 25.01.2021
Сообщений: 21

Доработка программы, найти ошибку, либо дописать какое-то дополнительное условие проверки

03.03.2021, 11:39. Показов 587. Ответов 2

Студворк — интернет-сервис помощи студентам
По условию задачи необходимо написать функцию проверки правильности заполнения доски судоку. Я ее написал и вроде даже все работает, но 1 тест не проходит. Из этого следует что программа либо имеет ошибку, либо в ней не предусмотрено какое-то дополнительное условие.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
def done_or_not(board):
    lis = []
    if len(board) == 0:
        return 'Try again!'
    if [9 for i in range(len(board))].count(9) != 9:
        return 'Try again!'
    for i in range(0, 9):
        for j in range(0, 9):
            lis = [board[i][j] for i in range(0, 9) if j != i]
            for k in range(len(board[i])):
                if board[i].count(board[i][k]) > 1 and (board[i][k] not in lis or board[i][k] in lis):
                    return 'Try again!'
        
            lis1 = []
            if i in [0, 3, 6] and j in [0, 3, 6]:
                for k in range(3):
                    lis1.extend([board[k][i] for i in range(j, j + 3)])
                if lis1.count(board[i][j]) > 1:
                    return 'Try again!'
            elif i in [1, 4, 7] and j in [1, 4, 7]:
                for k in range(3):
                    lis1.extend([board[k][i] for i in range(j - 1, j + 2)])
                if lis1.count(board[i][j]) > 1:
                    return 'Try again!'
            elif i in [2, 5, 8] and j in [2, 5, 8]:
                for k in range(3):
                    lis1.extend([board[k][i] for i in range(j - 2, j + 1)])
                if lis1.count(board[i][j]) > 1:
                    return 'Try again!'
        
    return 'Finished!'
Входные данные имеют примерно следующий вид:
Python
1
2
3
4
5
6
7
8
9
print(done_or_not([[1, 3, 2, 5, 7, 9, 4, 6, 8]
                        ,[4, 9, 8, 2, 6, 1, 3, 7, 5]
                        ,[7, 5, 6, 3, 8, 4, 2, 1, 9]
                        ,[6, 4, 3, 1, 5, 8, 7, 9, 2]
                        ,[5, 2, 1, 7, 9, 3, 8, 4, 6]
                        ,[9, 8, 7, 4, 2, 6, 5, 3, 1]
                        ,[2, 1, 4, 9, 3, 5, 6, 8, 7]
                        ,[3, 6, 5, 8, 1, 7, 9, 2, 4]
                        ,[8, 7, 9, 6, 4, 2, 1, 5, 3]]))
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.03.2021, 11:39
Ответы с готовыми решениями:

Как сделать какое-либо действие сразу после запуска программы, без нажатия чего-либо
Как сделать какое-либо действие сразу после запуска программы, без нажатия чего-либо?

Объединить две задачи в одну, либо дописать второе условие в задачу
.блок-схему Добрый день , некак не могу сдать задачу , у него 2 условия , есть решеные условия, но отдельно друг от друга , и нужно бы их...

Какое условие необходимо для проверки равных элементов столбца двухмерного массива?
Дана целочисленная матрица nxn найти номера столбцов элементы которых равны. построить матрицу не беда, но как я написал в заголовке...

2
1303 / 843 / 409
Регистрация: 12.03.2018
Сообщений: 2,305
03.03.2021, 12:22
Если забудем про количество сортировок и проходов по списку, то можно так
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def done_or_not(board):
    lst1to9 = list(range(1, 10))
    if not (all(sorted(row) == lst1to9 for row in board)
            and all(sorted(row) == lst1to9 for row in zip(*board))):
        return False
 
    for i in range(0, 9, 3):
        for j in range(0, 9, 3):
            lst = []
            for k in range(i, i+3):
                for m in range(j, j+3):
                    lst.append(board[k][m])
            if not sorted(lst) == lst1to9:
                return False
 
    return True
Добавлено через 7 минут
Список lst можно срезами заполнить
0
1 / 0 / 1
Регистрация: 25.01.2021
Сообщений: 21
03.03.2021, 12:29  [ТС]
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
def done_or_not(board):
    lis = []
    if len(board) == 0:
        return 'Try again!'
    if [9 for i in range(len(board))].count(9) != 9:
        return 'Try again!'
    for i in range(0, 9):
        for j in range(0, 9):
            lis = [board[i][j] for i in range(0, 9)]
            if lis.count(board[i][j]) > 1:
                return 'Try again!'
            elif board[i].count(board[i][j]) > 1:
                return 'Try again!'
 
            
            lis1 = []
            if i in [0, 3, 6] and j in [0, 3, 6]:
                for k in range(3):
                    lis1.extend([board[k][i] for i in range(j, j + 3)])
                if lis1.count(board[i][j]) > 1:
                    return 'Try again!'
            elif i in [1, 4, 7] and j in [1, 4, 7]:
                for k in range(3):
                    lis1.extend([board[k][i] for i in range(j - 1, j + 2)])
                if lis1.count(board[i][j]) > 1:
                    return 'Try again!'
            elif i in [2, 5, 8] and j in [2, 5, 8]:
                for k in range(3):
                    lis1.extend([board[k][i] for i in range(j - 2, j + 1)])
                if lis1.count(board[i][j]) > 1:
                    return 'Try again!'           
            
    return 'Finished!'
В общем в проверке по строкам и столбцам была ошибка немного переписал и все заработало
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.03.2021, 12:29
Помогаю со студенческими работами здесь

Какое условие проверки принадлежности точки к окружности, координаты центра которой произвольны?
Есть главная система координат. Выбираем любую точку. В этой точке центр нашей окружности. Далее опять выбираем еще одну произвольную...

Подправить код. Подключать клиентов до тех пор, пока не выполнится какое-либо условие
Доброго времени суток.Есть клиент-сервер, который принимает только четырех клиентов. Как изменить код так, чтобы сервер принимал клиентов,...

Условие отбора по по полю со списком формы -оно может быть пустое или содержать какое-либо значение
Форумчане, доброго времени суток! Подскажите, пожалуйста, как изменить условие отбора в запросе: Like...

Условие для проверки на ошибку при вводе
Есть функция выбора: int start_menu() { system("cls"); while(1)//Создание первоначального пользовательского меню { ...

Никак не могу найти ошибку, должен сосздать матрицу либо из звездочеку либо из пробелов
#include <iostream> #include <cmath> #include <ctime> using namespace std; int main(){ char a; int zvezd,probel,b; int...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru