我正在开发一个程序,要求用户输入一个数字,并将继续循环直到给出一个正数。当给出一个正数时,它将提醒用户并向他们显示其数字的总和。但是,我以为我已经正确编写了代码,但这给了我一个错误的答案。我做错了什么,该如何解决?
user_input = float(int(input("Please Enter Your Number:")))
s = 0
while user_input < 0:
float(int(input("Please Enter Another Number: ")))
if user_input > 0:
s += user_input%10
user_input //= 10
print("You've entered a positive number! The sum of the digits is: ", s)
答案 0 :(得分:1)
四件事:
float
,int
就足够了。while
循环。但是,在while
循环中,您实际上并未将新输入分配给user_input
。通过添加user_input =
while
循环确保user_input
> = 0,因此if user_input > 0:
是不必要的。while
循环。最终代码:
user_input = int(input("Please Enter Your Number: "))
s = 0
while user_input < 0:
user_input = int(input("Please Enter Another Number: "))
while user_input:
s += user_input % 10
user_input //= 10
print("You've entered a positive number! The sum of the digits is: ", s)
答案 1 :(得分:0)
if
语句通常用于确定是否应一次执行某事。
如果您要继续操作直到user_input
变为零,则需要while
。
此外,我不确定您为什么将数字存储为float
,尤其是无论如何,您都是通过int
进行存储的。也可能只是int
。
此外,如果值实际上不是负数,实际上并没有将新值分配给变量,则您要循环输入该值。
您可能还希望简化print
语句,以免在您要添加的循环的每次迭代中完成。
当然,有些人可能会建议采用一种 Pythonic 的方式来累加正数的数字很简单:
sum([int(ch) for ch in str(x)])
效果也一样,而不必担心显式循环。
答案 2 :(得分:0)
解决此问题的另一种方法是使用assert和一个函数:
def sum_num():
# try get user input
try:
user_in = input('Enter Number: ')
assert int(user_in) > 0
except AssertionError:
# we got invalid input
sum_num()
else:
s_d = sum([int(i) for i in user_in])
print('You\'ve entered a positive number! The sum of the digits is: ', s_d)
#run the function
sum_num()
因此这将询问用户输入,如果它不大于零,则将引发断言错误,我们将捕获该错误并通过再次调用该函数使用户返回输入数字。如果一切顺利,我们将输入分成字符并加起来。如list('12')给出['1','2']。我们转换为int并添加它们。 :)
关于这一点的令人敬畏的事情是,您也可以添加更多资产,以捕获其他问题(如浮动,字符作为无效输入)。例如。
假设literal_eval很重要(来自ast importliteral_eval)
assert isinstance(literal_eval(user_in),int) and int(user_in)>0
检查user_in是否为整数且大于0。因此,当用户输入浮点数或字符时,不会出现问题。
答案 3 :(得分:-1)
您不是从用户那里获取其他输入,而是遍历大于零的user_input。
因此while循环将不会执行。 如下修改您的代码。 user_input = float(int(input(“请输入您的电话号码:”)))
s = user_input
new_input = -1
while new_input < 0:
new_input = float(input("Please Enter Another Number: "))
s += new_input
if new_input > 0:
print("You've entered a positive number! The sum of the digits is: ", s)
输出将如下所示。
> Please Enter Your Number:2000 Please Enter Another Number: -100 Please
> Enter Another Number: -200 Please Enter Another Number: -300 Please
> Enter Another Number: -400 Please Enter Another Number: -500 Please
> Enter Another Number: 100 ("You've entered a positive number! The sum
> of the digits is: ", 600.0)