Найти - Пользователи
Полная версия: Зависает при выполнении
Начало » Python для новичков » Зависает при выполнении
1
trayjhon
Добрый день. Кто объяснит. Есть код приведенный ниже, при идентичных введенных данных может работать, а может висеть и ничего не делать. Как исправить?
 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()

py.user.next
У тебя в первом цикле бесконечный зависон. Продумай алгоритм, потом запиши его. А лучше блок-схему нарисуй, чтобы выработать навыки мышления. Что-то “не то” обычно хорошо видно на блок-схеме. А чтобы видеть блок-схему, нужно их сначала рисовать для разных программ, а потом они уже сами представляются без рисования.
trayjhon
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()
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB