从给定输入打印最大数字

时间:2020-12-20 09:32:34

标签: python python-3.x

我创建了一个代码来打印给定输入(字符串)中的最大数字,但它仅对包含不同数字的输入有效,并在输入包含重复数字时给出错误“字符串索引超出范围”。为什么这样? 注意:“不能使用列表的概念” 我的代码如下:

def largest_num(num): 
    nums = ""
    length = len(num)
    while length:
        max_num = num[0]
        for i in num:
            if i > max_num:
                max_num = i
        num = num.replace(max_num,"")
        nums = nums + max_num
        length-=1
    return nums
    
    x = input("Entered number: ")
    a = largest_num(x)
    print(a)

输出:

Output of above code

2 个答案:

答案 0 :(得分:0)

利用输入是字符串这一事实更直接,并且字符串可以轻松排序。请尝试接下来的代码:

    from functools import cmp_to_key
    
    def largestNum(num):
        num = [str(n) for n in num]
        num.sort(key=cmp_to_key(lambda b, a: ((a+b)>(b+a))-((a+b)<(b+a)) ))
        return ''.join(num).lstrip('0') or '0'

    x = input("Entered number: ")
    #a = largest_num(x)
    print(largestNum(x))

    Demo: 
    >>>Entered number: 321895
    985321
    
    >>>Entered number: 10957
    97510
  

    >>>Entered number: 4576889
    
    9887654
    >>> 

 Or simply do the sorting directly (you can convert this to function):
    1. num = list(num).  # num is string input of number
    2. num = num.sort(reverse=True)
    3. largest = int(‘’.join(num))  # answer 

答案 1 :(得分:0)

@Husnian Mehdi - 原始代码在该行中有错误 - "num.replace(max_num, "")。您可以在此之后放置 print 语句以查看当您输入具有重复数字的数字时会发生什么:例如 ' 454'。我还更改了一些变量名称以使其更具描述性。[提示:num.replace() 语句已删除两个重复的数字......!]

def largest_num(num): 
    ans = ""
    size = len(num)
    
    while size:
        max_digit = num[0]
        
        for n in num[1:]:
            if n > max_digit:
                max_digit = n
        
        ans = ans + max_digit     
        num = num.replace(max_digit, "")
        print(f' num is: {num} now ...')
        
        size -=1  
        print(f' len: {size}')
        
    return ans

x = input("Entered number: ")