我有一项任务。假设执行以下操作: - >取整数输入(比如说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)
答案 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 == True
或b == 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