【问题标题】:How can I condense this simple python program to make it more efficient?如何压缩这个简单的 python 程序以提高效率?
【发布时间】:2017-10-12 13:10:42
【问题描述】:

这只是我尝试制作的一个简单游戏,它会问你几个问题,然后自动根据答案格式化一个新的密码。

由于我是初学者,我想知道一些我可以使用的技术,这些技术可以提高这段代码的效率,并且可能会删除我已经声明的大量函数。谢谢!

minimum = 3
maximum = 10

name = input("What is your name? ")

def nameInput():

    if len(name) < minimum:
        print("Name is too small")
        return nameInput()
    elif len(name) > maximum:
            print("Name is too large")
            return nameInput()

nameInput()

food = input("What is your favorite food? ")

def foodInput():

    if len(food) < minimum:
        print("Enter a food name longer than " + (food))
        return foodInput()
    elif len(food) > maximum:
            print("Enter a food name shorter than " + (food))
            return foodInput()

foodInput()

birthday = input("What is your date of birth? (mmddyyyy) ")

nameIndex = name[0:2]
foodIndex = food[2: ]
birthIndex = birthday[0:3]

passcode = nameIndex + foodIndex + birthIndex

print("Your password is " + passcode)

【问题讨论】:

  • 有两个功能。我不会认为这是一个“疯狂的数量”。
  • 你可以做一个函数get_input(question, min_len, max_len)
  • 如果您愿意接受关于代码各个方面的反馈,除了如何缩短代码,您可以将其发布到codereview.stackexchange.com
  • 您是否注意到,如果前两个输入中的任何一个因任一条件(即小于最小值或大于最大值)失败,您将进入无限循环而无需进一步输入?
  • 什么循环?这段代码根本没有循环。

标签: python python-3.x optimization simplify


【解决方案1】:

如果您追求简洁,请尝试多次使用单个函数,而不是一次使用多个函数

def get_input(variable_name, min_size, max_size, begin, end):                 
    data = input("What is your {}? ".format(variable_name))                   
    if len(data) < min_size:                                                  
        raise ValueError('{} is too small'.format(variable_name.capitalize()))
    elif len(data) > max_size:                                                
        raise ValueError('{} is too big'.format(variable_name.capitalize()))  
    return data[begin:end]                                                    

name_index = get_input("name", 3, 10, 0, 2)                                   
food_index = get_input("food", 3, 10, 2, 100)                                 
birth_index = get_input("date of birth (mmddyyyy)", 3, 10, 0, 3)              
passcode = name_index + food_index + birth_index                              

print("Your passcode is", passcode)                                                                  

【讨论】:

  • 最好不要使用assert 进行流量控制(请参阅stackoverflow.com/questions/944592/…)。
  • 嗯,直到。编辑了使用例外的响应。
  • 谢谢,这几乎正是我所需要的!我只需要稍微定制一下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-25
  • 2012-01-04
相关资源
最近更新 更多