簡體   English   中英

Python 創建一維和二維圖像

[英]Python creating a 1D and 2D image

下面的代碼是提供給我們的,它基本上打印了第二個函數中顯示的圖像:

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 ()

嗯,這有效:

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])寫出 city 的當前行和列(已設置為單個字符),沒有換行符。

由於 print() 語句,您的代碼可能是 Python 3。 如果您提到或標記它可能會有所幫助。

我正在運行 Python 2.7,所以我將使用舊的打印語法來測試我發布的代碼。 您可能必須將其還原(添加括號)。

我會這樣寫:

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"]

但是我們在列表中添加了另一個列表,創建了一個列表列表。

我希望這有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM