Уведомления

Группа в Telegram: @pythonsu

#1 Май 4, 2020 05:45:03

trayjhon
Зарегистрирован: 2020-05-04
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Зависает при выполнении

Добрый день. Кто объяснит. Есть код приведенный ниже, при идентичных введенных данных может работать, а может висеть и ничего не делать. Как исправить?

 import random
n, m, k = (int(i) for i in input().split())
a = [[0 for j in range(m)] for i in range(n)]
qwe = [b for b in range(n-1)]
qwer = [b for b in range(m-1)]
rand = []
count = 0
while len(rand)<k:
    while count != k:   
        for i in range(k):
            row = random.choice(qwe)
            col = random.choice(qwer)
            a[row][col] = -1
        
            row = str(row)
            col = str(col)
            if (row+col) not in rand:
                rand += [row+col]
            count += 1
print(a)
print(rand)
lenrand = rand[0]
for i in range(n):
    for j in range(m):        
        if a[i][j] == 0:
            for di in range(-1, 2):
                for dj in range(-1, 2):
                    ai = i + di
                    aj = j + dj
                    if 0 <= ai < n and 0 <= aj < m and a[ai][aj] == -1:
                        a[i][j] += 1
for i in range(n):
    for j in range(m):
        if a[i][j] == -1:
            print('*', end='')
        elif a[i][j] == 0:
            print('.', end='')
        else:
            print(a[i][j], end='')
    print()

Отредактировано trayjhon (Май 4, 2020 05:51:19)

Офлайн

#2 Май 4, 2020 06:52:46

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10026
Репутация: +  857  -
Профиль   Отправить e-mail  

Зависает при выполнении

У тебя в первом цикле бесконечный зависон. Продумай алгоритм, потом запиши его. А лучше блок-схему нарисуй, чтобы выработать навыки мышления. Что-то “не то” обычно хорошо видно на блок-схеме. А чтобы видеть блок-схему, нужно их сначала рисовать для разных программ, а потом они уже сами представляются без рисования.



Офлайн

#3 Май 4, 2020 08:14:46

trayjhon
Зарегистрирован: 2020-05-04
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Зависает при выполнении

py.user.next
У тебя в первом цикле бесконечный зависон. Продумай алгоритм, потом запиши его. А лучше блок-схему нарисуй, чтобы выработать навыки мышления. Что-то “не то” обычно хорошо видно на блок-схеме. А чтобы видеть блок-схему, нужно их сначала рисовать для разных программ, а потом они уже сами представляются без рисования.
Не рисовал ни разу блок-схем, поэтому дальше поломал голову и вроде заработало:
 import random
n, m, k = (int(i) for i in input().split())
r = n*m/2
if k > r:
    k = int(input('Введите число не превышающее половину от произведения первых 2 введеных чисел' + '\n' ))
a = [[0 for j in range(m)] for i in range(n)]
qwe = [b for b in range(n-1)]
qwer = [b for b in range(m-1)]
rand = []
count = 0
while count < k:
        for i in range(k):
            if count == k:
                break
            row = random.choice(qwe)
            col = random.choice(qwer)
            count += 1
            a[row][col] = -1
            row = str(row)
            col = str(col)
            if (row+col) not in rand:
                rand += [row+col]
            else:
                count -= 1
print(a)
print(rand)
lenrand = rand[0]
for i in range(n):
    for j in range(m):        
        if a[i][j] == 0:
            for di in range(-1, 2):
                for dj in range(-1, 2):
                    ai = i + di
                    aj = j + dj
                    if 0 <= ai < n and 0 <= aj < m and a[ai][aj] == -1:
                        a[i][j] += 1
for i in range(n):
    for j in range(m):
        if a[i][j] == -1:
            print('*', end='')
        elif a[i][j] == 0:
            print('.', end='')
        else:
            print(a[i][j], end='')
    print()

Отредактировано trayjhon (Май 4, 2020 08:25:22)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version