首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >一个简单的提示打印程序

一个简单的提示打印程序
EN

Code Review用户
提问于 2014-07-29 07:37:00
回答 3查看 178关注 0票数 3

我已经完成了我想做的事情,但我认为可以做得更好。我要我的代码看起来很专业。

我的代码所做的是询问您的名字,并以下面的形式给出输出。

输入:杰克输出:J=喜悦a=令人敬畏的c=好奇的k=善良

请通过查看以下代码,向我展示如何以专业的方式编写代码。

代码语言:javascript
运行
复制
#!/usr/bin/env python
import sys
import string

names = {
'a': 'awesome',
'b': 'bold',
'c': 'curious',
'd':'delightful',
'e':'emotional',
'f':'fearless',
'g':'gifted',
'h':'helpful',
'i':'imaginary',
'j':'joyful',
'k':'kindhearted',
'l':'lovable',
'm':'memorable',
'n':'naughty',
'o':'open',
'p':'playful',
'q':'quarrelsome',
'r':'reliable',
's':'serious',
't':'thoughtful',
'u':'unique',
'v':'victorious',
'w':'wise',
'x':'xerox copy',
'y':'yummy',
'z':'zealous'
}

def main():
 i=j=0
 user = raw_input("What is your name?: ")
 print ""
 while i<len(user):
  while j<len(names):
   if user[i]==names.keys()[j]:
    print " " + user[i] + ' = ' + names.values()[j]
   j=j+1
  while j!=0:
   j=0 
  i=i+1

if __name__ == '__main__':
  main()
EN

回答 3

Code Review用户

回答已采纳

发布于 2014-07-29 08:03:03

风格

在有关样式的代码中,可以很容易地检测/改进一些东西。如果需要,您将找到各种工具来自动执行检查:pep8pyflakespychecker。他们会给你很多有趣的信息,从imported module xxx is not used,到bad indentation,通过missing documentationwrong spacinginvalid constant name。另外,了解Python中有一个风格指南,称为PEP8 8,肯定值得一读,这对您来说可能是件好事。

在修复了所有使工具高兴的内容之后,代码如下所示:

代码语言:javascript
运行
复制
"""Module docstring"""

NAMES = {
    'a': 'awesome',
    'b': 'bold',
    'c': 'curious',
    'd': 'delightful',
    'e': 'emotional',
    'f': 'fearless',
    'g': 'gifted',
    'h': 'helpful',
    'i': 'imaginary',
    'j': 'joyful',
    'k': 'kindhearted',
    'l': 'lovable',
    'm': 'memorable',
    'n': 'naughty',
    'o': 'open',
    'p': 'playful',
    'q': 'quarrelsome',
    'r': 'reliable',
    's': 'serious',
    't': 'thoughtful',
    'u': 'unique',
    'v': 'victorious',
    'w': 'wise',
    'x': 'xerox copy',
    'y': 'yummy',
    'z': 'zealous'
}


def main():
    """Main function"""
    i = j = 0
    user = raw_input("What is your name?: ")
    print ""
    while i < len(user):
        while j < len(NAMES):
            if user[i] == NAMES.keys()[j]:
                print " " + user[i] + ' = ' + NAMES.values()[j]
            j = j + 1
        while j != 0:
            j = 0
        i = i + 1

if __name__ == '__main__':
    main()

您的容器(usernames)中有一个while循环。这是有点不切实际的,但如果你真的想这样做,它更清楚地初始化你要用循环前循环的变量,这样你就不必尝试在循环之后重新设置它。

代码语言:javascript
运行
复制
i = 0
while i < len(user):
    j = 0
    while j < len(NAMES):
        if user[i] == NAMES.keys()[j]:
            print " " + user[i] + ' = ' + NAMES.values()[j]
        j = j + 1
    i = i + 1

更好的是,range函数可以生成您想要的值,这样您就不需要自己进行增量了:

代码语言:javascript
运行
复制
for i in range(len(user)):
    for j in range(len(NAMES)):
        if user[i] == NAMES.keys()[j]:
            print " " + user[i] + ' = ' + NAMES.values()[j]

但是Python为您提供了一种更好的遍历容器的方法:

代码语言:javascript
运行
复制
for c in user:
    for j in range(len(NAMES)):
        if c == NAMES.keys()[j]:
            print " " + c + ' = ' + NAMES.values()[j]

另外,由于您使用的是字典,所以不需要在NAMES上循环。您可以自然地在dict中查找键:

代码语言:javascript
运行
复制
for c in user:
    if c in NAMES:
        print " " + c + ' = ' + NAMES[c]
票数 5
EN

Code Review用户

发布于 2014-07-29 08:53:02

您的初始字典可以很容易地由python构建,而不必键入所有的初始字母-词组合:

代码语言:javascript
运行
复制
NAMES = {word[0]: word for word in ('awesome', 'bold', 'curious' ...)}
票数 3
EN

Code Review用户

发布于 2014-07-29 13:22:14

您的代码看起来像一个由C程序员编写的Python程序。没关系--学习如何用Python习惯性地完成任务需要练习。

意外输出

它有助于思考一个对手可以破坏你的程序的方式。例如:

代码语言:javascript
运行
复制
What is your name?: John Smith

 o = open
 h = helpful
 n = naughty
 m = memorable
 i = imaginary
 t = thoughtful
 h = helpful

即使您不知道解决方案,添加# TODO: handle capital letters, spaces, etc.注释也是个好主意。

命名

names不是字典的合适名称。我建议使用ATTRIBUTES,因为它描述了它包含的值的类型。使用所有的大写表示它应该被视为一个常量.

杂散进口

import sysimport string都是不必要的,所以您应该删除它们。

建议的解决方案

代码语言:javascript
运行
复制
#!/usr/bin/env python

ATTRIBUTES = {
    'a': 'awesome',
    'b': 'bold',
    'c': 'curious',
    # etc…
    'z': 'zealous',
}

def main():
    user = raw_input('What is your name?: ')
    print
    for c in user.lower():
        attribute = ATTRIBUTES.get(c)
        if attribute:
            print(' %c = %s' % (c, attribute))
        else:
            print(' %c' % (c))

if __name__ == '__main__':
    main()
票数 3
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/58351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档