Python 如何将randon 0和1转换为列表?

Python 如何将randon 0和1转换为列表?,python,python-3.x,Python,Python 3.x,我正在学习一门课程,我制作了一个程序,为1打印“*”,为0打印“” 我想把图像变成0和1。所以我从一个网站上得到它,这样我就可以用我自己的代码打印出来。我制作了另一个代码,用于将未格式化的列表转换为格式化列表。网站给出了以下结果,我想将其转换为列表 1000111111111110000111111111111111111111 1001111111111100000111111111111111111111 0001111000000000000011111111111111111111 00

我正在学习一门课程,我制作了一个程序,为1打印“*”,为0打印“”

我想把图像变成0和1。所以我从一个网站上得到它,这样我就可以用我自己的代码打印出来。我制作了另一个代码,用于将未格式化的列表转换为格式化列表。网站给出了以下结果,我想将其转换为列表

1000111111111110000111111111111111111111
1001111111111100000111111111111111111111
0001111000000000000011111111111111111111
0001110000000000000011111111111111111111
1000110000000000000011111111111111111111
1110000000110000000011111111111111111111
0000000000111000000011111111111111111111
0000100001110000000011111111111111111111
0001111111100000000011111111111111111111
0000011000000000000011111111111111111111
0000000110000000000011111111111111111111
1100000111000000000011111111111111111111
1110000000000000000011111111111111111111
1110000000000000000111111111111111111111
1111000000000000000111111111111111111111
1111000000000000000111111111111111111111
1111100000000000000111111111111111111111
1110100000000000001111111111111111111111
1110100000000000001111111111111111111111
1000000000000000000011111111111111111111
0000000000000000000011111111111111111111
0000000000000000000011111111111111111111
0000000000000000000011111111111111111111
0000000000000000000011111111111111111111
0000000000000000000011111111111111111111
0000000000000000000011111111111111111111
0000000000000000000011111111111111111111
0000000000000000000011111111111111111111
0000000000000000000011111111111111111111
0000011000000000000011111111111111111111
0000011100000000000011111111111111111111
0010011100000100000011111111111111111111
0100111100000000000011111111111111111111
0001111000000000000111111111111111111111
0011111000000000000111111111111111111111
0010110000011100000011111111111111111111
0000010100000000000111111111111111111111
0000000000000000001111111111111111111111
0000000000000000001111111111111111111111
因此,我的转换代码是:

img = '''1000111111111110000111111111111111111111
1001111111111100000111111111111111111111
0001111000000000000011111111111111111111
0001110000000000000011111111111111111111
1000110000000000000011111111111111111111
1110000000110000000011111111111111111111
0000000000111000000011111111111111111111
0000100001110000000011111111111111111111
0001111111100000000011111111111111111111
0000011000000000000011111111111111111111
0000000110000000000011111111111111111111
1100000111000000000011111111111111111111
1110000000000000000011111111111111111111
1110000000000000000111111111111111111111
1111000000000000000111111111111111111111
1111000000000000000111111111111111111111
1111100000000000000111111111111111111111
1110100000000000001111111111111111111111
1110100000000000001111111111111111111111
1000000000000000000011111111111111111111
0000000000000000000011111111111111111111
0000000000000000000011111111111111111111
0000000000000000000011111111111111111111
0000000000000000000011111111111111111111
0000000000000000000011111111111111111111
0000000000000000000011111111111111111111
0000000000000000000011111111111111111111
0000000000000000000011111111111111111111
0000000000000000000011111111111111111111
0000011000000000000011111111111111111111
0000011100000000000011111111111111111111
0010011100000100000011111111111111111111
0100111100000000000011111111111111111111
0001111000000000000111111111111111111111
0011111000000000000111111111111111111111
0010110000011100000011111111111111111111
0000010100000000000111111111111111111111
0000000000000000001111111111111111111111
0000000000000000001111111111111111111111

'''

i = 0
pyt_img = ''
for num in img:
    if i == 0:
        pyt_img += f'[{num}'
        i = i+1
    elif i >= 1 & i < 39:
        pyt_img += f',{num}'
        i = i + 1
    elif i >= 40:
        pyt_img += f'{num}]\n'
        i = 0


print(pyt_img)
问题是它永远不会到达i=40,所以i=40行永远不会工作。

给定img字符串,您可以使用str.join和嵌套列表理解来实现这一点

>>> print('\n'.join(''.join('*' if i == '1' else ' ' for i in line) for line in img.split('\n')))
*   ***********    *********************
*  ***********     *********************
   ****             ********************
   ***              ********************
*   **              ********************
***       **        ********************
          ***       ********************
    *    ***        ********************
   ********         ********************
     **             ********************
       **           ********************
**     ***          ********************
***                 ********************
***                *********************
****               *********************
****               *********************
*****              *********************
*** *             **********************
*** *             **********************
*                   ********************
                    ********************
                    ********************
                    ********************
                    ********************
                    ********************
                    ********************
                    ********************
                    ********************
                    ********************
     **             ********************
     ***            ********************
  *  ***     *      ********************
 *  ****            ********************
   ****            *********************
  *****            *********************
  * **     ***      ********************
     * *           *********************
                  **********************
                  **********************

您正在执行位智能and操作,而不是逻辑and。Python利用and关键字执行您的建议

此外,在if语句中排除了i==39的情况,因此我永远不会变成40。修改if语句使其具有包容性,因此如果i>=1和i 只有当i大于或等于1且小于39时,才输入此代码分支。这意味着如果我是39,它将不会进入,因为39不小于39。因此它不会给我加1,我也永远不会达到40。如果使用elif i>=1和i,则在elif i>=1和i<39:中使用的按位&的值高于比较运算符

因此,由于优先级的原因,条件的计算结果如下

elif i >= (1 & i) < 39:
比较链接使其等效于

elif (i >= (1 & i))  and  ((1 & i) < 39):
1&i是1和i的按位and,它将等于i的最后一位,因此,如果i为偶数,则为0;如果i为奇数,则为1


Soi>1&i永远是真的,1&i<39也是真的。您的整个条件始终为真。

我本以为在“str”和“int”实例之间不支持类似TypeError的错误:“>=”。如果不尝试改进代码,我将保持在39,因为只有当我小于等于38时,才会输入您的第一个elif块;最后一个只有在我40岁或40岁以上时才输入。不存在i=39的情况。另外:不要使用按位and“&”,使用逻辑and“and”。因此,第二个elif变成:elif i>=1和i<40:仍然存在使用按位and的问题。我刚试过I=40,然后I>=1&I<39结果为真;但是i>=1和i<39会导致False。这根本不是条件的计算方式,因为&的优先级高于比较运算符。有关详细说明,请参见我的答案。“按位and”和“逻辑and”以不同优先级绑定。在这种情况下,i>39的结果不同。在这个答案的第一个版本中,您说过在这种情况下,使用按位and和or逻辑and不会有什么不同。嗯,在这里它确实起了作用;但既然你把它删掉了,我们可以删除我们的评论。
elif (i >= (1 & i))  and  ((1 & i) < 39):