这个决策结构有没有重复?

时间:2013-05-17 07:17:11

标签: python performance

无论如何要简化这个我没有看到的决策结构吗?在我看来,每个陈述都是确定正确顺序所必需的。任何见解都会非常感激。

def main():
    again = 'y'
    while again == 'y' or again == 'Y':
        str_1 = input('Enter string 1: ')
        str_2 = input('Enter string 2: ')
        str_3 = input('Enter string 3: ')
        first = min(str_1, str_2, str_3)
        print(first)
        again = input('Another? ')

def min(str1, str2, str3):
    # str1 < str2 < str3
    if str1 < str2 and str2 < str3:
        low = str1

    # str1 < str3 < str2   
    elif str1 < str3 and str3 < str2:
        low = str1

    # str2 < str1 < str3
    elif str2 < str1 and str1 < str3:
        low = str2

    # str2 < str3 < str1
    elif str2 < str3 and str3 < str1:
        low = str2

    # str3 < str1 < str2
    elif str3 < str1 and str1 < str2:
        low = str3

    # str3 < str2 < str1
    elif str3 < str2 and str2 < str1:
        low = str3

    return low

main()

4 个答案:

答案 0 :(得分:2)

 low=str1

if str2 < low
    low = str2
elif str3 < low 
    low = str3

答案 1 :(得分:1)

已经有一个名为min()

的内置函数
def main():
    again = 'y'
    while again.lower() == 'y':
        str_1 = input('Enter string 1: ')
        str_2 = input('Enter string 2: ')
        str_3 = input('Enter string 3: ')
        first = min(str_1, str_2, str_3)
        print(first)
        again = input('Another? ')

运行时:

Enter string 1: 5
Enter string 2: 8
Enter string 3: 3
3
Another? N

既然你已经澄清了这是一种做法,那么还有另外一种方法:

if str1 < str2 and str2 < str3:
    low = str1

可以:

if str1 < str2 < str3:
    low = str1

来自docs

比较可以任意链接,例如,x <1。 y&lt; = z等于x&lt; y和y&lt; = z,除了y仅被评估一次(但在两种情况下,当x&lt; y被发现为假时,根本不评估z。)

答案 2 :(得分:0)

内置函数min()已经比你的更好了。所以回答你的问题 - 是的,你可以简化它!

def main():
    while True:
        strs = [input('Enter string {}: ').format(i) for i in range(1,4)]
        print(min(strs))    # first
        if input('Another? ') in "yY":
            break

答案 3 :(得分:0)

如果您正在寻找最小的树,那么有许多无用的测试......例如

if str1 <= str2:
    if str1 <= str3:
        low = str1
    else:
        low = str3
else:
    if str2 <= str3:
        low = str2
    else:
        low = str3

即。你只需要2个比较操作来决定什么是最小值(虽然有6个排序只有三个可能的最小值,这就是为什么两位信息就足够了)。换句话说,如果你知道一个元素小于其他元素你不关心那两个元素之间的相对顺序。

即使在你的表格中,也需要的案例更少:

if str1 <= str2 and str1 <= str3:
    low = str1
elif str2 <= str1 and str2 <= str3:
    low = str2
else:
    low = str3

然而,使用的典型形式(在增加元素数量时可以更好地扩展)是:

low = x1
if x2 < low: low = x2
if x3 < low: low = x3
...
if xN < low: low = xN