使用while循环输出数字* 2

时间:2017-02-28 21:05:17

标签: python python-3.x while-loop

我的程序应该接受输入,然后将每个数字乘以2,直到达到输入数字。例如,如果输入的数字是8,则输出1,2,4,8,16,32,64,128。我的代码停在8号而不是128号。尚未解决

limit = input('Enter a value for limit: ')
limit = int(limit)
ctr = 1
while ctr <= (limit):
    print(ctr, end=' ')
    ctr = ctr * 2
print("limit =", limit )

3 个答案:

答案 0 :(得分:0)

您将ctr乘以2,但将其与8进行比较,因此它从1到2变为4,再变为8,然后停止。

我不确定为什么你想在没有**运算符的情况下这样做,但在这种情况下你可能需要考虑跟踪计数器(从1到8)和值(从1到128)作为两个独立的变量。

答案 1 :(得分:0)

再次查看while条件:您的循环将一直运行,直到您的产品到达用户的输入。在您的示例中,limit将设置为8,当ctr达到8时,您的循环将结束。在这里,我将为您的代码添加一些注释,也许您可​​以看到问题出在哪里遇到的是:

limit = input('Enter a value for limit: ')
limit = int(limit) # Getting input from the user. If the user enters n,
                   # the program should output powers of 2 up to 2^n
ctr = 1            # Initializing the variable holding the powers of 2
while ctr <= (limit):  # While the power of 2 is less than n (This line is
                       # where your problem is. Your loop ends when the
                       # power of 2 reaches n, not 2^n)
    print(ctr, end=' ') # Print the power of 2
    ctr = ctr * 2      # Double the power of 2 to get the next one
print("limit =", limit ) # Print the number the user put in

要解决此问题,请为循环计数器和产品使用单独的变量,或者更好地使用for循环:

for i in range(limit):
    ctr *= 2

答案 2 :(得分:0)

你的while循环在达到8时停止,如你的条件所示。

while ctr <=(limit)

您可以使用以下代码简单地达到结果。

l = int(input())
n = 1
while l>0:
    print(n)
    n *= 2
    l -= 1

我希望这可以回答查询。