2013-05-01 76 views
-1

這個問題主要是因爲我找不到任何好的Python例子來說明如何保持一個主要的實例等,而且我正在嘗試不會發展成任何不良習慣,就像我開始使用PHP時一樣。我大約3個小時前開始使用Python,一直在做這個,主要是控制檯,然後我決定在觀看https://www.youtube.com/watch?v=2IEePwMAb5Y&list=PL0A9588F9B2C45B3A時嘗試列表。它主要殺死代碼看起來非常糟糕,可能不正確。有沒有什麼地方可以找到一些Python編寫的簡單應用程序,用於查看和運行?Python OOP示例?

背景:我想要一個小的小應用程序,讓我看看是否可以循環播放數組。所以我做了一個購物清單組織者。

i = 0 
v = [] 
vara = None 
def view(): 
    indx = 1 
    for i in v: 
     print "Grocery #" + str(indx) + ": " + str(i) 
     indx += 1 
while vara != "end" and vara != "exit": 
    vara = raw_input("Please enter a grocery: ") 
    vara = str(vara) 
    if vara == "view": 
     view() 
    elif vara[len(vara)-4: len(vara)] == " del": 
     key = vara[0:len(vara) - 4] 
     if key in v: 
      v.remove(key) 
      print "Deleted: " + key 
     else: 
      print "Error, " + key + " was not found in your list" 
    elif (vara != "end" and vara != "exit") and len(vara) > 0: 
     v.append(vara) 
view() 

我有地方找到一些很好的例子更重要的是,這是最重要的。另外,如果可以,我將如何創建實例以開始和結束。如果可以的話,非常感謝你。

+0

這不是很清楚關於你在問什麼。從我收集的信息來看,這聽起來像是你正在尋找一種資源來開始學習一些Python語法,也許還有更多的想法。通常人們對他們發佈的代碼和錯誤的東西都有特別的問題。您可能希望提出一個您不明白的代碼示例,以使您的問題更具體。 看起來有希望的一種資源:http://learnpythonthehardway.org/book/。 – 2013-05-01 00:55:36

+0

http://www.d.umn.edu/~gshute/softeng/principles.html,http://en.wikipedia.org/wiki/Software_design,我認爲設計理論比語言最重要,你可以閱讀一些Python理論和實踐中的概念,也可以閱讀Martin Fowler的「信息系統體系結構」一書,我很好的一本書,我再次閱讀它...... – DGomez 2013-05-01 00:57:02

+0

您也可以享受http://codereview.stackexchange。 com – kojiro 2013-05-01 01:11:42

回答

2

要編寫更好的python代碼,最好的方法是1)編寫大量的python代碼2)通過詢問'如何以更pythonic的方式編寫它?'來批評自己的python代碼? (要了解pythonic,請閱讀http://blog.startifact.com/posts/older/what-is-pythonic.htmlhttp://www.python.org/dev/peps/pep-0020/)3)閱讀標準庫,瞭解列表解析,itertools和整潔的技巧,這樣您就可以將它們放在腦後。 Python對於將所有常見操作設置爲單行/單功能非常重要。

以下是我對你的代碼的想法:

i = 0 

全球有壞名聲變量初始化。變量應該要麼有一個描述性的名稱或者是臨時迭代變量(在這種情況下I,J,K,等都是OK)

v = [] 

一個壞的名稱全局變量的初始化。什麼是'v'?如果你從現在起3個月閱讀你的代碼,你將不知道這是什麼。另外,變量應儘可能地在類或函數內初始化(用於OOP封裝)。

vara = None 

用錯誤名稱進行全局變量初始化。什麼是'vara'?如果不需要擁有全局狀態,則不應該在全局級別上定義它。您應該在何時何地使用擬合名稱來定義變量。

def view(): 
    indx = 1 
    for i in v: 
     print "Grocery #" + str(indx) + ": " + str(i) 
     indx += 1 

而是有兩個單獨的迭代變量,使用enumerate()返回指標和項目的元組。 http://docs.python.org/2/library/functions.html#enumerate

正如

def view(): 
    for i, item in v.iteritems(): 
     print "Grocery #" + str(i) + ": " + str(item) 

的效果好很多!它(可選)在這一點上甚至不需要自己的方法,因爲它是一個雙線程。

while vara != "end" and vara != "exit": 

應包裝在一個函數,並呼籲如果 == 「主要」。如在What does if __name__ == "__main__": do?

啊,這是什麼vara是。你應該把它稱爲更具描述性的東西 - 命令,動作,用戶命令等等。瓦拉對我來說毫無意義。

vara = raw_input("Please enter a grocery: ") 
    vara = str(vara) 

我敢肯定,這條線是不必要的 - 不會只的raw_input能夠返回一個字符串,反正?

if vara == "view": 
     view() 
    elif vara[len(vara)-4: len(vara)] == " del": 
     key = vara[0:len(vara) - 4] 

我想不出具體的方法來重寫這個,但它'聞起來'哈克。 (也許這是事實,你做子和indexofs之類的東西,而不是使用合適的結構化的方式做所有的命令解析,但是,每個人都開始了這樣的:))

 if key in v: 
      v.remove(key) 
      print "Deleted: " + key 
     else: 
      print "Error, " + key + " was not found in your list" 
    elif (vara != "end" and vara != "exit") and len(vara) > 0: 
     v.append(vara) 
view() 
+0

非常感謝。非常多的我會看到發生了什麼事,一旦我完成了其他閱讀,並格式化我的代碼。感謝您花時間向我解釋這一點。非常感謝你。 – Justin 2013-05-01 01:12:00

+0

@Justin我認爲我現在已經完成了編輯帖子。祝你好運,玩得開心:) – Patashu 2013-05-01 01:13:55

+0

謝謝,你有什麼地方的東西的例子嗎?特別是關於hacky部分的部分,有沒有一個地方可以找到構建該部分的一些示例? – Justin 2013-05-01 01:26:19