2012-11-21 23 views
2

下面的代码是提供给我们的,它基本上打印这是在第二个功能显示图像:使用Python创建一个1D和2D图像

import sys 



# CONSTANTS 
MIN_ROW = 0 
MAX_ROW = 9 
MIN_COLUMN = 0 
MAX_COLUMN = 9 
WALL = "#" 
BUILDING = "b" 
BUSH = "u" 
PLAYER = "@" 
EMPTY = " " 
STAIRS = "X" 


def display (city): 
    r = 0 
    c = 0 
    print("CITY LEVEL") 
    for r in range (0, (MAX_ROW+1), 1): #LOOPS1 
     for c in range (0, (MAX_COLUMN+1), 1): 
     sys.stdout.write(city[r][c]) 
     print() 
    print() 

def initialize(): 
    r = 0 
    c = 0 
    city = [] 

    for r in range (0, (MAX_ROW+1), 1): #LOOP2 
     city.append([])#appends an empty list to city 
     for c in range (0, (MAX_COLUMN+1), 1): 
     city[r].append(" ") 
    #    0 1 2 3 4 5 6 7 8 9 
    city [0] = ["#","#","#","#","#","#","#","#","#","#"] 
    city [1] = ["#","@"," "," "," "," "," "," ","u","#"] 
    city [2] = ["#"," "," ","b","b"," "," "," ","X","#"] 
    city [3] = ["#"," "," ","b","b"," "," "," "," ","#"] 
    city [4] = ["#"," "," "," "," "," "," "," ","b","#"] 
    city [5] = ["#","u"," ","u","u","u","u","u","u","#"] 
    city [6] = ["#","b"," "," "," "," "," "," "," ","#"] 
    city [7] = ["#"," "," "," "," ","b"," ","b"," ","#"] 
    city [8] = ["#"," "," "," ","b"," "," "," "," ","#"] 
    city [9] = ["#","#","#","#","#","#","#","#","#","#"] 
    return city 


# MAIN 
def main(): 
    level = initialize() 
    display (level) 





main() 

现在我试图重现此为一维图像,但出于某种原因,我正在运行第一个函数的sys.stdout.write()的类型错误。它似乎试图打印整个列表,而不仅仅是一个字符。任何人都可以帮助我调试?也有人请告诉我什么是在上面的代码标记LOOPS1环路回事,LOOPS2

import sys 


def display(track): 
    c=0 
    for c in range(0,20,1): 
     sys.stdout.write(track[c]) 
    print() 

def initialize(): 
    c=0 
    track= [] 
    for c in range(0,20,1): 
     track.append([]) 
     track[c].append(" ") 
    track[0]= ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t"] 
    return track 

level= initialize() 
display(level) 

如果有不清楚的地方,请让我知道,我会尽快将其修复。

编辑:代码为我的计划:

import sys 
import random 


# CONSTANTS 


PLAYER = "@" 
EMPTY = " " 


#Takes the information from the function initialize() and displays it. Outputs the fitness simulation. 
def display (track): 
    r = 0 
    c = 0 

    print("\nTRACK") 
    for r in range (0, (4), 1): 
     for c in range (0, (41), 1): 
      sys.stdout.write(track[r][c]) 
     print() 
    print() 

def speedDisplay(speed): 
    options=["(w)alk","(j)og","(r)un","(f)ast run"] 
    for o in range(0,speed,1): 
     print(options[o],"\n") 




def inputs():#ioerror here? 
    values= set("wWjJrRfFlLsSeE") 
    while True: 
     move=input("\nPlease select the speed you would like to travel at from the options listed:") 
     for m in move: 
      if m not in values: 
       print("\nInadmissable entry, Please only use inputs valid in the options above.") 
       break 
     else: 
      break 
    if move=="w" or move=="W": 
     usedEnergy=0#turn into random functions later 
    elif move=="j" or move=="J": 
     usedEnergy=1 
    elif move=="r" or move=="R": 
     usedEnergy=2 
    elif move=="f" or move=="F": 
     usedEnergy=5 
    return usedEnergy 

def remainingEnergy(energy,usedEnergy): 
    energy= energy-usedEnergy 
    print("\nRemaining Energy:",energy,"\n") 
    return energy 

def amountLeft(energy): 
# enter ioexception error here somewhere? 


    while True: 
     if energy <0 or energy >20: 
      print("error") 
     elif energy>=5: 
      speed=4 
     elif energy <5 and energy >=2: 
      speed=3 
     elif energy <2 and energy >=1: 
      speed=2 
     elif energy <1 and energy >=0: 
      speed=1 
     else: 
      break 

     return speed 











# This function is used to initialize the game track that will later be displayed. 
def initialize(): 
    r = 0 
    c = 0 
    track = [] 
    #Creates each row and column. A "for" loop initiates which creates and appends an empty list to the list "track". Then, taking the current row into consideration, the respective number of columns are created via the inner "for loop and a space is appended to the end of the current row. The loop re-initiates and the process is repeated for all 4 required rows. This results in 4 rows and 41 coloumns. 
    for r in range (0, (4), 1): 
    #appends an empty list to track 
     track.append([]) 
     for c in range (0, (41), 1): 
    #appends a space to the current row 
      track[r].append(" ") 
    # the actual rows and columns are created below. 
    #    0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P Q R S T U V W X Y 
    track [0] = [" ","0"," ","1"," ","2"," ","3"," ","4"," ","5"," ","6"," ","7"," ","8"," ","9"," ","A"," ","B"," ","C"," ","D"," ","E"," ","F"," ","G"," ","H"," ","I"," ","J"," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "] 
    track [1] = [" ","-"," ","-"," ","-"," ","-"," ","-"," ","-"," ","-"," ","-"," ","-"," ","-"," ","-"," ","-"," ","-"," ","-"," ","-"," ","-"," ","-"," ","-"," ","-"," ","-"," "] 
    track [2] = ["|","@","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"," ","|"] 
    track [3] = [" ","-"," ","-"," ","-"," ","-"," ","-"," ","-"," ","-"," ","-"," ","-"," ","-"," ","-"," ","-"," ","-"," ","-"," ","-"," ","-"," ","-"," ","-"," ","-"," ","-"," "] 
    return track 






def move (sRow, sCol, dRow, dCol, track): 
    EMPTY= " " 
    PLAYER= "@" 
    DIVIDER= "|" 
    track[sRow][sCol] = EMPTY 
    track[dRow][dCol] = PLAYER 






# MAIN 
def main(): 
    track = initialize() 
    display (track) 
    print("\n(w)alk\n\n(j)og\n\n(r)un\n\n(f)ast run") 
    usedEnergy=inputs() 
    energy=20 
    energy=remainingEnergy(energy,usedEnergy) 
    while energy<20: 
     usedEnergy=inputs() 
     speed= amountLeft(energy) 
     speedDisplay(speed) 
     energy=remainingEnergy(energy,usedEnergy) 



main() 
+0

您是否需要一个可以处理2D和1D情况的显示功能?如果需要,我可以编辑我的答案以采取此方法。 – jimhark

+0

对不起,直到现在还没有看到。 2D和1D是完全分开的情况。我正在尝试创建一维并试图将上述内容用作指导。 – SeesSound

回答

2

那么,这个工程:

import sys 

def display(track): 
    c=0 
    for c in range(0,20,1): 
     sys.stdout.write(track[c]) 
    print() 

def initialize(): 
    c=0 
    track = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t"] 
    return track 

level= initialize() 
display(level) 

你的问题是你必须在你是如何处理track不匹配。在initialize你创造它作为一个列表的列表,但display你访问它,如果它只是一个人物的名单。使两者的字符列表比较简单,使得无论字符的列表的列表是更一般的(允许用于一维和二维的情况下相同的功能)。

这是怎么回事在第一循环?

display在第一码块:

for r in range (0, (MAX_ROW+1), 1): #LOOPS1 
    for c in range (0, (MAX_COLUMN+1), 1): 
     sys.stdout.write(city[r][c]) 
    print() 
print() 

R为从0变化到MAX_ROW行索引,0 - 9 C是列索引从0变化到MAX_COLUMN,0 - 9 。

sys.stdout.write(city[r][c])不换行写出当前行和(已被设置为单个字符)城市列。

由于print()语句,您的代码可能是Python 3。如果您提到或标记了这可能会有所帮助。

我运行的Python 2.7,所以我会用旧的打印语法,这样我就可以测试我张贴的代码。您可能必须将其还原(添加parens)。

我会写为:

def display (city): 
    print("CITY LEVEL") 
    for row in city: 
     for c in row: 
     print c, 
     print 
    print 

在Python 2在打印结束一个逗号抑制换行符。

这是怎么回事在第二循环中?

initialize在你的第一个代码块:

for r in range (0, (MAX_ROW+1), 1): 

r为0至MAX_ROW,0-9

city.append([])#appends an empty list to city 

city是一个列表。这附加一个空的列表到城市。

for c in range (0, (MAX_COLUMN+1), 1): 

c将b 0至MAX_COLUMN,0-9

 city[r].append(" ") 

附加一个空格字符到当前行。

def initialize(): 
    city = [ 
     # 0 1 2 3 4 5 6 7 8 9 
     ["#","#","#","#","#","#","#","#","#","#"], # 0 
     ["#","@"," "," "," "," "," "," ","u","#"], # 1 
     ["#"," "," ","b","b"," "," "," ","X","#"], # 2 
     ["#"," "," ","b","b"," "," "," "," ","#"], # 3 
     ["#"," "," "," "," "," "," "," ","b","#"], # 4 
     ["#","u"," ","u","u","u","u","u","u","#"], # 5 
     ["#","b"," "," "," "," "," "," "," ","#"], # 6 
     ["#"," "," "," "," ","b"," ","b"," ","#"], # 7 
     ["#"," "," "," ","b"," "," "," "," ","#"], # 8 
     ["#","#","#","#","#","#","#","#","#","#"], # 9 
    ] 
    return city 

约city.append([])

initialize有一条线(在第一循环for)::

city.append([])#appends an empty list to city 

如我会写这在循环输入之前city是:

[] 

右侧的第一个追加city后:

[[]] 

这是包含一个项目,一个空的列表清单。

如果线路有:

city.append(0)

这将是:

[0] 

或者:

city.append("Jim") 

它会给你:

["Jim"] 

但是我们在列表中添加另一个列表,创建一个列表列表。

我希望这会有所帮助。

+0

但是,还是有些含糊不清。首先,我需要“for”语句,因为范围稍后将根据全局常量的值进行更改。其次,列表清单是什么意思?现在在哪里,它的输出是什么? – SeesSound

+0

感谢您的编辑,真棒。希望在帖子完成后给你最好的答案。 – SeesSound

+0

我有一个关于city.append([])的问题。在此代码实施后,城市现在看起来像这样:city = [] []?我问,因为城市最初已经有一个空的清单了?如果是这样,那么什么被添加到city = [] []中的第一个空列表? “for”循环是否只查看第二个空列表,并对每个连续列表进行处理,从而使第一个列表永远为空? @jimhark – SeesSound