【问题标题】:How Would I get a direct opposite digit for numbers 0-9我如何获得数字 0-9 的直接相反数字
【发布时间】:2018-11-13 17:30:46
【问题描述】:

我试图让我的程序从 0 到 9 返回 w 整数的相反数字。

例如:

0 1 2 3 4 5 6 7 8 9

9 8 7 6 5 4 3 2 1 0

所以当用户输入像 245 这样的 3 位数字时,它应该返回 754

我写过这样的东西,但它只适用于 1 位数字!

number = input (" Enter the number! ")

if number == 0:
    number = 9

elif number == 1:
    number = 8

elif number == 2:
    number = 7

elif number == 3:
    number = 6

elif number == 4:
    number = 5

elif number == 5:
    number = 4

elif number == 6:
    number = 3

elif number == 7:
    number = 2

elif number == 8:
    number = 1

elif number == 9:
    number = 0  

else:
    print "You didn't enter a number"          

print number

而且它不是那么动态!任何帮助将非常感激!谢谢

【问题讨论】:

    标签: python variables math logic


    【解决方案1】:

    使用第一个字符串中的索引来查找下一个字符串:

    s = '0123456789'
    t = '9876543210'
    
    num = input('Enter number: ')
    result = ''.join([t[s.index(x)] for x in num])
    

    示例运行

    Enter number: 245
    754
    

    或者,您可以不使用s 和查找:

    result = ''.join([t[int(x)] for x in num])
    

    【讨论】:

    • 我想知道为什么人们不注意解决方案的复杂性。两种提议的解决方案都是二次的,虽然可以使它成为线性的:(
    • @RafazZ 是他们吗?
    • @RafazZ 但这里有问题的“字符串”(x)只有一个字符长。 int 不是在 整个 字符串上调用,而是一次调用一个字符。
    • @RafazZ 整数大小与这些算法的复杂性无关,因为 i) 与常见的整数限制相比,相关的数字都非常小,并且 ii) Python 使用固定的整数大小。在这种情况下,“复杂性”的适当含义应该是指输入字符串的长度。因此,您链接的问题与此问题无关。
    • @Kizito,使用 num = raw_input('Enter number: '),因为您使用的是 Python 2。
    【解决方案2】:

    只需从最大可能数中减去输入,您就会得到“翻转”行为:

    value = input('Enter number: ')
    result = 9 - int(value)
    
    # If the input is 3, the output would be 6, as 9 - 3 = 6
    

    对于较大的数字,您可以做同样的事情,但迭代每个数字:

    result = ''.join([(9 - int(x)) for x in value])
    

    作为纯粹基于数学的解决方案,您可以使用输入的长度并自动生成最大数(归功于 cmets 中的 RafazZ):

    result = (10**len(value)-1) - int(value)
    
    # If the input is 251, the output would be 748, as:
    #     len('251') = 3
    #     10**3 - 1 = 999
    #     999 - 251 = 748
    

    【讨论】:

    • 999...9 中减去怎么样?您可以找到输入字符串的长度并制作那么多9s :)))
    • @RafazZ 使用这样的整数 999...9 在理论上听起来像是一个更优雅的解决方案,但实际上需要更多的代码来生成这样的数字,并且与我的相同无论如何,第二种解决方案 - 从输入数字中的每个数字中减去 9。
    • 并非如此:10**len(input)-1 是创建具有足够 9s 的整数所需的唯一一行。基本上一切都归结为result = 10**len(input)-1-int(input)
    • 输入字符串的长度是已知的,生成很简单10**length-1
    • @RafazZ 很公平,我不怎么使用 python,完全忘记了指数运算符。我将其添加为解决方案。
    猜你喜欢
    • 1970-01-01
    • 2012-06-22
    • 2020-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-06
    • 2012-07-25
    • 2020-02-27
    相关资源
    最近更新 更多