Python 意外循环输出

Python 意外循环输出,python,Python,这段代码输出00000000,但我认为它会输出00000011,因为最后2个索引符合if标准 import pygame numbers = [pygame.Color("#FFFFFF"), pygame.Color("#FFFFFF"), pygame.Color("#FFFFFF"), pygame.Color("#FFFFFF"), pygame.Color("#FFFFFF"),

这段代码输出00000000,但我认为它会输出00000011,因为最后2个索引符合if标准

import pygame
numbers = [pygame.Color("#FFFFFF"),
            pygame.Color("#FFFFFF"),
            pygame.Color("#FFFFFF"),
            pygame.Color("#FFFFFF"),
            pygame.Color("#FFFFFF"),
            pygame.Color("#FFFFFF"),
            pygame.Color("#FF0000"),
            pygame.Color("#FF0000")]

x = 0
binary = ""
for number in numbers:
    print(number)
    if numbers[x] == pygame.Color("#FF0000"):
        binary += "1"
    elif numbers[x] == pygame.Color("#FFFFFF"):
        binary += "0"
print("after: ", binary)  

将循环更改为:

for number in numbers:
    print(number)
    if number == pygame.Color("#FF0000"):
        binary += "1"
    elif number == pygame.Color("#FFFFFF"):
        binary += "0"

number[x]
将始终指向第一个元素,因为您没有递增
x
。因此,将
numbers[x]
更改为
numbers

如果要使用索引,可以如下更改代码:

binary = ""
for x, number in enumerate(numbers):
    print(number) # number = numbers[x]
    if numbers[x] == pygame.Color("#FF0000"):
        binary += "1"
    elif numbers[x] == pygame.Color("#FFFFFF"):
        binary += "0"
print("after: ", binary)  

你永远不会改变x的值。所以每次,数字[x]都是数字[0],这就是pygame.Color(“#FF0000”)。您正在混合两种循环方法。只要检查number==什么。您总是检查数组的第一个元素,因为您不更改x值,所以第二个条件永远不会为真。只是说,如果您不需要使用索引,只需要使用值,就不应该使用索引。是的,当然。。。但有时,只更改for循环的行并添加枚举比更改for循环中的所有变量更容易。无论如何,我的只是一个建议和你答案的替代品(绝对正确)。是的,我意识到我的错误,我不是在增加x,但实际上也不需要使用x进行迭代。谢谢你的帮助。