2013-05-01 75 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