Форум сайта python.su
0
Добрый день. Кто объяснит. Есть код приведенный ниже, при идентичных введенных данных может работать, а может висеть и ничего не делать. Как исправить?
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)
Офлайн
857
У тебя в первом цикле бесконечный зависон. Продумай алгоритм, потом запиши его. А лучше блок-схему нарисуй, чтобы выработать навыки мышления. Что-то “не то” обычно хорошо видно на блок-схеме. А чтобы видеть блок-схему, нужно их сначала рисовать для разных программ, а потом они уже сами представляются без рисования.
Офлайн
0
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)
Офлайн