有人可以解释为什么此导入不会引发错误吗?

时间:2020-08-16 18:41:13

标签: python python-3.x python-import

关于import的所有知识都表明这应该引发错误。

夸大了我的困惑。

有人可以解释这个导入执行,为什么它不会引发错误?

import conway.blahblahspongebobsquarepantsinthedinerboogiefacesmahboxhammerblrrrbswwwpnoobiedoopieaaaayeeeeee
Sample Output: This is how it is supposed to look when executed properly so it works perfectly
## #  # #  ### # ##  ### # #  #  # # ##      # #  ###  ##   
   # #### # # #   # # ## # # #  ##  ### #####  ###  #  ## ##
## #     #    #####   ###### #  ###  # ### #  ### # #  # #  
# Conway's Game of Life
import random, time, copy
WIDTH = 60      # set value for width
HEIGHT = 20     # set value for height

# Create a list of list for the cells:
nextCells = []                              # create an empty list called nextcells
for x in range(WIDTH):                      # evaluates for x in range(60) we loop until nextcells is full
    column = [] # Create a new column.      # create a (60) lists called column inside nextcells
    for y in range(HEIGHT):                 # now we give each cell a 50/50 chance of starting off alive/dead
        if random.randint(0, 1) == 0:
            column.append('#') # Add a living cell.           # we append (basically we are building the
        else:                                                 # column from scratch or "starting at 0"
            column.append(' ') # Add a dead cell.
    nextCells.append(column) # nextCells is a list of column lists.

while True: # Main program loop.
    print('\n\n\n\n\n') # Separate each step with newlines.       # create some space between each automation
    currentCells = copy.deepcopy(nextCells)                       # copy our nextcells list

    # Print currentCells on the screen:
    for y in range(HEIGHT):                                         # this is the beginning column
        for x in range(WIDTH):                                      # we nest this so that each row gets printed
            print(currentCells[x][y], end='') # Print the # or space.   # completely x loops and prints the entire
        print() # Print a newline at the end of the row.                # row for each row in the column

    # Calculate the next step's cells based on current step's cells:
    for x in range(WIDTH):
        for y in range(HEIGHT):
            # Get neighboring coordinates:
            # `% WIDTH` ensures leftCoord is always between 0 and WIDTH - 1
            leftCoord  = (x - 1) % WIDTH             # % wraps our range to remain in bounds 0 -1 in this case
            rightCoord = (x + 1) % WIDTH                # would equal 59 since our WIDTH = 60 or(00 - 59)
            aboveCoord = (y - 1) % HEIGHT            # % wraps our height the same way
            belowCoord = (y + 1) % HEIGHT            # so this evaluates to 1/20 = remainder 19
                                                        # if we are in the first column
            # Count number of living neighbors:
            numNeighbors = 0
            if currentCells[leftCoord][aboveCoord] == '#':           # for each square we evaluate alive/dead
                numNeighbors += 1 # Top-left neighbor is alive.      # for the 8 squares around it
            if currentCells[x][aboveCoord] == '#':
                numNeighbors += 1 # Top neighbor is alive.
            if currentCells[rightCoord][aboveCoord] == '#':
                numNeighbors += 1 # Top-right neighbor is alive.
            if currentCells[leftCoord][y] == '#':
                numNeighbors += 1 # Left neighbor is alive.
            if currentCells[rightCoord][y] == '#':
                numNeighbors += 1 # Right neighbor is alive.
            if currentCells[leftCoord][belowCoord] == '#':
                numNeighbors += 1 # Bottom-left neighbor is alive.
            if currentCells[x][belowCoord] == '#':
                numNeighbors += 1 # Bottom neighbor is alive.
            if currentCells[rightCoord][belowCoord] == '#':
                numNeighbors += 1 # Bottom-right neighbor is alive.

            # Set cell based on Conway's Game of Life rules:
            if currentCells[x][y] == '#' and (numNeighbors == 2 or    # 2 conditions if this square is "alive"
numNeighbors == 3):                                                   # and has 2 - 3 living neighbors it stays "alive"
                # Living cells with 2 or 3 neighbors stay alive:
                nextCells[x][y] = '#'
            elif currentCells[x][y] == ' ' and numNeighbors == 3:     # we now run the check on dead squares to see
                # Dead cells with 3 neighbors become alive:         # if they come to life
                nextCells[x][y] = '#'
            else:
                # Everything else dies or stays dead:
                nextCells[x][y] = ' '
    time.sleep(20) # Add a 1-second pause to reduce flickering.       # lastly we add a 1 second delay

1 个答案:

答案 0 :(得分:4)

import conway.whatever的第一步是到import conway。完成后,查看它是否具有whatever变量或子包。由于您的代码在模块级别具有无限循环,因此它将永远在import上运行,而python从不进行第二步来确定“是否存在”。

该脚本不是为导入而构建的。为此,您需要将模块级别的代码移至某个函数中,说出“ game_of_life”,并在程序知道其正在作为脚本运行时调用它。

def game_of_life():
    .... that module level stuff

if __name__ == "__main__":
    game_of_life()