2015-11-04 38 views
3

長篇故事總之,我在一段時間後重新編寫代碼,並且認爲我會做一些比較直接的事情,將C程序轉換爲Python。我熟悉基本的C,熟悉基本的編程概念,所以對我來說,我所要求的不應該那麼困難。理解列表問題(我認爲)

我正在將C的經典Star Trek文字遊戲改寫爲Python。一個函數設置了遊戲世界:

經過大量的牙齒磨牙後,我得出了我使用的錯誤列表的結論。我的一個功能代碼爲:

高清setupGalaxy(困難):

for x in range(0,8): 
    for y in range(0,8): 
     sectors[x][y] = 0 
     quadrants[x][y].baseHere = 0 
     quadrants[x][y].klingonCount = 0 
     quadrants[x][y].starCount = 0 

    klingonsHere = 0 
    numBases = 0 

for x in range(0,8): 
    for y in range(0,8): 
     J = random.randint(1,99) 

     baseHere = 0 

     if (J < 5): 
      numBases += 1 
      baseHere = 1 

     temp = getKlingons(difficulty) 

     klingonsHere += temp 
     quadrants[x][y].klingonCount = temp 
     quadrants[x][y].baseHere = baseHere 
     quadrants[x][y].starCount = random.randint(1,4) 
     print quadrants[x][y].klingonCount,quadrants[x][y].baseHere,quadrants[x][y].starCount," ", 

print 
numKlingons = klingonsHere 
for x in range(0,8): 
    for y in range(0,8): 
     print quadrants[x][y].klingonCount,quadrants[x][y].baseHere,quadrants[x][y].starCount," ", 

return 

什麼功能應該做的是:啓動的2維列表象限內容爲0(可能是沒有必要的,但給我一些安心),然後隨機產生一些克林貢,星座和星星,並將它們放入列表中。

我的問題是這樣的:我包括一些打印語句,讓我看到了分配的輸出,和他第一次打印語句吐出來的正是我想看到的,與明星,克林貢等

隨機採集

第二個打印語句打印出相同的數字64次。在第一次和第二次之間,我看不到有什麼變化。

我假設我在列表中出錯。誰能幫忙?

Joseph。

+2

您在函數中設置的所有全局變量都應聲明爲「全局」,否則它們將屬於函數的名稱空間(即它們將是局部變量)。這裏是一個[教程](http://spartanideas.msu.edu/2014/05/12/a-beginners-guide-to-pythons-namespaces-scope-resolution-and-the-legb-rule/) LEGB規則 – Pynchia

+0

什麼是'quadrantClass'?它看起來像是用一個類對象填充了「象限」的所有單元,這是沒有意義的。 – user2357112

回答

1

在Python中,如果一個變量在函數體內的任何位置被賦值,它被認爲是一個本地的,除非明確聲明爲全局變量。

x = 4; 
def f(): 
    x = 6 
    print(x) 
f() 
print(x) 

輸出:

6 
4 

在功能

x = 4; 
def f(): 
    global x 
    x = 6 
    print(x) 
f() 
print(x) 

輸出開始插入一個明確的全局聲明:

6 
6 

This瞭解詳情。

+0

仍然沒有骰子。第一個功能增加了「全局象限」,我仍然遇到同樣的問題。就像我不想要的那樣,我可能會嘗試使用函數聲明來傳入和傳出內容,因爲許多頁面都會提供建議,並查看是否有幫助。如果這不起作用,其他不太明顯的是錯的... –

+0

你能刪除這條評論嗎?我做了一些更多的測試,發現我認爲上面的問題。我應該開始一個關於它的新線索。很多道歉 –

0

看來我需要回去做一些更多的功課,然後再開始編碼。有一些我以前沒有遇到過的Python和陷阱,因此我最好得到一些適當的建議,而不是試圖把它附加到零碎。 非常感謝everybodys的幫助。