0

有没有办法简化我没有看到的这个决策结构?在我看来,每个陈述对于确定正确的顺序都是必要的。任何见解将不胜感激。

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

4 回答 4

2
 low=str1

if str2 < low
    low = str2
elif str3 < low 
    low = str3
于 2013-05-17T07:20:09.873 回答
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
于 2013-05-17T07:29:55.597 回答
0

已经有一个名为的内置函数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? ')

运行时:

输入字符串 1:5
输入字符串 2:8
输入字符串 3:3
3
其他?ñ

由于您已经澄清这是一种做法,因此还有另一种方法:

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

可:

if str1 < str2 < str3:
    low = str1

文档

比较可以任意链接,例如,x < y <= z 等价于 x < y 和 y <= z,除了 y 只计算一次(但在这两种情况下,当找到 x < y 时根本不计算 z是假的)。

于 2013-05-17T07:20:27.467 回答
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
于 2013-05-17T07:20:59.970 回答