-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

4 回答 4

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 == True请注意,对于条件语句,执行or绝不是 Pythonic b == False

来自PEP

不要使用 == 将布尔值与 True 或 False 进行比较。

是:如果打招呼:

否:如果问候 == True:

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

于 2013-07-22T12:33:56.067 回答
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; 它有什么用?
第三,如果goodvalue1is only will be a 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!
于 2013-07-22T12:27:16.150 回答
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

于 2013-07-22T12:39:56.847 回答
-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
于 2013-07-22T12:29:40.207 回答