我目前正在用Python 3.3.0编写一个程序,它打印出前n个平方数,最后打印出它们的总和。条件是用户只能计算大于零的整数项。这是代码:
print("WELCOME!")
n = input("How many numbers to sum up?: ")
while n <= 0:
print("You have to write a positive integer; try again!")
n = input("How many numbers to sum up?: ")
i = 1
sum = 0
while 0 < i <= n:
print(i,"*",i,"=", i**2)
sum += i**2
i += 1
print("Sum:", sum)
现在,我设法编写了当用户输入负数时的错误消息。但是,当用户输入字符串(例如“十五”)时,我在编写错误消息时遇到困难。
我希望程序允许用户一次又一次地尝试为“n”分配一个值,就像他们输入了一个负数一样;基本上,我想编写一个循环,如果用户输入字符串,则一遍又一遍地要求相同的事情。
问题是 input() 总是将字符串分配给任意变量,因此我尝试编写代码将字符串转换为整数。当用户输入整数值时它可以正常工作,但是如果“n”不是整数,则无法定义 int(n)。
我在谷歌上搜索了很多关于这个问题的信息,我发现了一些使用 try 和 except ValueError 的例子,但它们似乎都无法创建一个循环。
有人有想法吗?
最佳答案
将 try/except
放入循环内。
while True:
try:
n = int(input("How many numbers to sum up?: "))
if n <= 0:
print("You have to write a positive integer; try again!")
continue
break
except ValueError:
print("You have to write a positive integer; try again!")
您还可以将代码的最后部分(第一个循环之后的部分)替换为:
squares = lambda x: [print('{0} * {0} = {1}'.format(x, x**2)), x**2][1]
print("Sum:", sum(squares(i) for i in range(1, n+1))
但不推荐使用 lambda ;)
。您当然可以使用普通函数来代替:
def squares(x):
print('{0} * {0} = {1}'.format(x, x**2))
return x**2
关于python - 检查输入是否是循环中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14793839/