Мой цикл while не выполняется правильно. Он будет проходить и увеличивать i, как он должен, но он не увеличивает i за пределами цикла. Это означает, что он продолжает добавлять одни и те же пары цветов пикселя rgb ~ 4000 раз. Есть предположения?Python: мой цикл while сохраняет первый цвет в списке
Пример входного файла: (я пропустил первые три строки, потому что это тип файла, размеры фотографий, # или цвета. Остальные - данные пикселя r, g, b. Каждые 3 строки - один пиксель в порядке r, г, б)
P3
200 200
255
192
48
64
216
52
180
252
8
176
212
96
4
152
108
108
20
248
64
80
140
132
Мой код:
import math
with open('Ocean.ppm','r') as f:
output = f.read().split("\n")
i = 0
r_point = 3 + i
g_point = 4 + i
b_point = 5 + i
resolution = []
resolution.append(output[1].split(" "))
file_size = resolution[0]
file_size = int(file_size[0]) * int(file_size[1])
file_size = int(file_size*3)
print(file_size)
pixel_list = []
pixel_list.append(str(output[0]))
pixel_list.append(str(output[1]))
pixel_list.append(str(output[2]))
while file_size >= i:
red = math.sqrt((int(output[r_point])-255)**2 + (int(output[g_point]) - 0)**2 + (int(output[b_point])-0)**2)
green = math.sqrt((int(output[r_point])-0)**2 + (int(output[g_point]) - 255)**2 + (int(output[b_point])-0)**2)
blue = math.sqrt((int(output[r_point])-0)**2 + (int(output[g_point]) - 0)**2 + (int(output[b_point])-255)**2)
white = math.sqrt((int(output[r_point])-0)**2 + (int(output[g_point]) - 0)**2 + (int(output[b_point])-0)**2)
black = math.sqrt((int(output[r_point])-255)**2 + (int(output[g_point]) - 255)**2 + (int(output[b_point])-255)**2)
L = [red, green, blue, white, black]
idx = min(range(len(L)), key=L.__getitem__)
if idx == 0:
# red
pixel_list.append('255')
pixel_list.append('0')
pixel_list.append('0')
i += 3
elif idx == 1:
# green
pixel_list.append('0')
pixel_list.append('255')
pixel_list.append('0')
i += 3
elif idx == 2:
# blue
pixel_list.append('0')
pixel_list.append('0')
pixel_list.append('255')
i += 3
elif idx == 3:
# white
pixel_list.append('0')
pixel_list.append('0')
pixel_list.append('0')
i += 3
elif idx == 4:
# black
pixel_list.append('255')
pixel_list.append('255')
pixel_list.append('255')
i += 3
f = open('myfile.ppm','w')
for line in pixel_list:
f.write(line + "\n")
Я ничего не тестировал. Но, возможно, поместите инкремент i за пределы оператора if в самом конце, а не в каждом if. Также попробуйте распечатать свое значение idx, чтобы узнать, находится ли он в диапазоне от 0 до 4 –
В коде есть несколько особых заявлений. .. довольно сложно понять, что он делает и почему. Формат входного файла не указан – Pynchia