来自多个数字的数字

时间:2013-07-22 12:22:44

标签: python python-3.3

我有一项任务。假设执行以下操作: - >取整数输入(比如说100) - >添加数字,直到总和为单个数字(1)

我的节目到现在为止:

goodvalue1=False
goodvalue2=False

while (goodvalue1==False):
    try:
        num=input("Please enter a number: ")
    except ValueError:
        print ("Wrong input. Try again.")
    else:
        goodvalue1=True


if (goodvalue1==True):
    ListOfDigits=list(map(int,str(num)))
    sum=10
    while(sum>9):
        Sum=sum(ListOfDigits)
        if (Sum>9):
            ListOfDigits=list(map(int,str(Sum)))
            Sum=sum(ListOfDigits)

4 个答案:

答案 0 :(得分:3)

不需要那些布尔值。您可以将代码分解为:

while True:
    try:
        num = int(input("Please enter a number: ")) # Note how I've added int()
        break # Breaks out of the loop. No need for a boolean.
    except ValueError:
        print("Wrong input. Try again.")

我不明白你为什么叫list(map(int, str(num)));但是我想你打算把int()放在你的输入上。所以我在上面添加了一个。现在它可以捕获错误:)。

现在,要获得一位数,您可以在此处使用另一个while循环:

while num > 9:
    num = sum(map(int, str(num)))

这几乎会创建[1, 0, 0] sum()然后调用。这种情况一直重复,直到它不再是两位数(或三,四等)

总而言之:

while True:
    try:
        num = int(input("Please enter a number: ")) # Note how I've added int()
        break # Breaks out of the loop. No need for a boolean.
    except ValueError:
        print("Wrong input. Try again.")

while num > 9: # While it is a two digit number
    num = sum(map(int, str(num)))

请注意,对于条件语句,执行a == Trueb == False并不是pythonic。

来自PEP

  

不要使用==。

将布尔值与True或False进行比较      

是的:如果问候:

     

否:如果问候==真:

     

更糟糕的是:如果问候语为真:

答案 1 :(得分:1)

你非常接近。以下是您需要更改的内容:

Sum=sum(ListOfDigits)
while(Sum>9):
    Sum=sum(ListOfDigits)
    if (Sum>9):
        ListOfDigits=list(map(int,str(Sum)))
        Sum=sum(ListOfDigits)

在这段代码中,你有一个while循环,当sum大于9时执行。那么为什么要使用另一个变量Sum(同样,它会产生非常难以阅读的代码)?这样做:

while(sum>9):
    sum=sum(ListOfDigits)
    ListOfDigits=list(map(int,str(sum)))

这只是为了向您展示您的代码出了什么问题。我不建议使用它(看下面我会做什么)。首先,你混合了变量命名约定,这是一个非常糟糕的主意,特别是当你在一个团队中工作时(即使在其他情况下,你能想象从现在起一个月或六个月后查看你的代码吗?)。
其次,你永远不会使用goodvalue2;这是为了什么?
第三,如果goodvalue1只是bool,那么为什么要检查if (goodvalue1==True)if goodvalue1更清晰,更pythonic 对于所有好的爱,请在代码中使用一些空格。看了ListOfDigits=list(map(int,str(num)))这样的表达一段时间后,眼睛变得非常紧张。请改为ListOfDigits = list(map(int, str(num)))

就个人而言,我会这样做:

num = None
while num is None:
    try:
        num = int(raw_input("Enter a number: "))
    except ValueError:
        num = None

num = sum(int(i) for i in str(num))
while num > 9:
    num = sum(int(i) for i in str(num)) # this uses a list comprehension. Look it up, they're very useful and powerful!

答案 2 :(得分:1)

我对此的看法:

inp = None
while inp is None:
    try:
        inp = int(input('Enter number here: '))
    except ValueError:
        print('Invalid Input, try again')

summed = sum(map(int, str(inp)))
while summed > 9:
    summed = sum(map(int, str(summed)))

print('The result is {}'.format(summed))

为了解释@Haidro做得很好:https://stackoverflow.com/a/17787707/969534

答案 3 :(得分:-1)

回归!

计算数字的总和。检查总和是否有一位数或多位数。如果是一个数字,那是你的答案,否则,再次在总和上调用函数。

def oneDigitSum(n):
    if n < 10:
        return n
    else:
        return oneDigitSum(sum([int(i) for i in str(n)]))
        # [f(elem) for elem in li] = [f(a), f(b), .... ] where li = [a, b, ... ]
        # sum returns the total of the numbers in list

while True: # continue this loop for eternity, until it gets break
    try:
        num=int(input("Please enter a number: "))
        print(oneDigitSum(num))
        break # printed the sum, now I can break the loop peace fully
    except ValueError:
        print ("Wrong input. Try again.")
        continue # oops, looks like wrong input, lets continue the loop