我是python的新手,我正在尝试创建一个代码来打印所有方形数字,直到用户输入所需值的平方。
n = raw_input("Enter number")
a=1
while a < n:
a=1
print a*a
a += 1
if a > n:
break
当我运行此代码时,它无限地打印“1”......我猜测a
的值不会增加+=
所以它永远是a=1
。我该如何解决这个问题?
答案 0 :(得分:4)
有一些问题。首先,您的输入(raw_input()
返回的内容)是字符串,因此您必须将其转换为整数:
n = int(raw_input(...))
其次,每次迭代都要设置a = 1
,因此,由于循环条件为a < n
,循环将永远运行(如果n > 1
)。你应该删除
a = 1
最后,检查是否a > n
并不是必要的,因为循环条件会处理它:
while a < n:
print a * a
a += 1
# 'if' is not necessary
答案 1 :(得分:1)
您的代码中存在一个小错误:
while a < n:
a=1 # `a` is always 1 :)
print a*a
a += 1
if a > n:
break
答案 2 :(得分:1)
您在循环的每次迭代中将a
的值设置回1
,因此每次检查n
时,值都为2
。删除a=1
行。
答案 3 :(得分:1)
正如其他人所说,每次循环时,您的具体问题是重置a
。对此更加Pythonic的方法是for
循环:
for a in range(1, n):
print(a ** 2)
这意味着您不必手动增加a
或决定何时break
或以其他方式退出while
循环,并且通常不太容易出错,例如重置{{1 }}
另请注意,a
会返回一个字符串,您需要将其变为raw_input
:
int
答案 4 :(得分:1)
更好的想法是制作一个简单的功能
def do_square(x):
return x*x
然后只需对其进行列表理解
n = int(raw_input("Enter #:")) #this is your problem with the original code
#notice we made it into an integer
squares = [do_square(i) for i in range(1,n+1)]
这是一种更加pythonic的方式来做你想做的事情 你真的想用函数来定义易于消化并且可以重用的功能块
你可以扩展这个概念并创建一个函数来获取用户的输入并对其进行一些验证
def get_user_int():
#a function to make sure the user enters an integer > 0
while True:
try:
n = int(raw_input("Enter a number greater than zero:"))
except TypeError:
print "Error!! expecting a number!"
continue;
if n > 0:
return n
print "Error: Expecting a number greater than zero!"
然后您可以将输入构建到列表中
squares = [do_square(i) for i in range(1,get_user_int()+1)]
并且真的do_square
是一个如此简单的函数,我们可以在循环
squares = [x*x for x in range(1,get_user_int())]
答案 5 :(得分:0)
循环中的第一行在每次迭代时将a
设置为1。
答案 6 :(得分:0)
在循环中指定= 1。这意味着它覆盖了a+=1
。
答案 7 :(得分:0)
试试这个:
n = eval(raw_input("Enter number"))
a=1
while a < n:
print a*a
a += 1
这里的问题是每次进入循环时都会覆盖a的值
答案 8 :(得分:0)
问题处于while循环的条件下,要打印数字的平方直到一个极限值,请尝试此操作。
def powers(x):
n=1
while((n**2)<=x):
print(n**2, end =' ')
n +=1