【问题标题】:can someone explain why this import does not raise an error?有人可以解释为什么此导入不会引发错误吗?
【发布时间】:2020-08-17 04:03:42
【问题描述】:

我所知道的关于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

【问题讨论】:

  • conway.... 文件里面有什么?
  • 不多我加一下
  • Import 运行您尝试导入的文件。这个事实在我的项目中帮助了我,我不得不从当前的 Python 文件运行另一个 Python 文件。这有帮助吗?
  • 正如@JonNezbit 所说,import 需要执行您的conway 模块,以便它可以定义要导入的属性。您看到一个错误,因为它没有您请求的属性,但由于循环永远不会终止,您永远不会到达引发错误的地步。
  • 感谢您的时间和精力。你是对的,我添加了一个 break 来逃避循环并检查。 Ty 还让我不必创建一个我还没有做到这一点的源代码。我知道我非常感谢它。

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


【解决方案1】:

import conway.whatever的第一步是import conway。完成后,查看它是否有whatever 变量或子包。由于您的代码在模块级别有一个无限循环,它会在import 上永远运行,python 永远不会进入第二步,即找出“whatever”是否存在。

该脚本不是为导入而构建的。为此,您需要将模块级代码移动到一个函数中,例如“game_of_life”,并在程序知道它作为脚本运行时调用它。

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

if __name__ == "__main__":
    game_of_life()

【讨论】:

  • ty 我感谢您的所有见解,我只做了大约 2 周。所以很容易忽略一些小事。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-10
  • 1970-01-01
  • 2014-12-13
  • 2013-12-03
  • 1970-01-01
  • 1970-01-01
  • 2019-10-28
相关资源
最近更新 更多