虽然无限?

时间:2015-08-13 13:48:15

标签: loops for-loop while-loop

我正在尝试编写一个程序,您可以在其中输入一个数字,然后输入您想要的数字乘以及多少次。在此之后,您可以选择所需的#步骤以及该步骤的编号:

numbr= int(raw_input("pick a number: "))
mult= int(raw_input("keep multiplying by what: "))
listy= []
ff= 1

while x < 999999999999999999999999999: 
    numbr *= mult
    listy.append(x)
    ff += 1

cc = int(raw_input("what number do you want: "))
print listy[cc-2]

目前它只能达到那么大的数字。如何输出用户想要的#步骤?如果我在x&gt; 1,然后它只是加载,甚至不允许用户输入他们想要的东西。我该怎么办?

2 个答案:

答案 0 :(得分:1)

首先,计算机内存有限,通常应该避免使用比您绝对需要的更多的计算机内存。特别是问题,您根本不需要中间值 - 如果只需要一个数字,为​​什么要列出一个列表?

另外,对样式的一些随机评论:尝试使变量不言自明,并避免在必要时跳过字母或缩短内容。无论如何,这是一个如何做到这一点的例子:

number= int(raw_input("pick a number: "))
multiplier = int(raw_input("keep multiplying by what: "))
times = int(raw_input("multiply how many times: "))

x = 0
while x < times:
    number *= multiplier
    x += 1

print(number)

但有一点,你不必为此使用while循环,因为for _ in range(times)也能完成这项工作,而且更具可读性。这里的_是一个变量名,通常用于我们不需要的值,例如: a&#34;丢弃&#34;变量,因此代码变为:

number= int(raw_input("pick a number: "))
multiplier = int(raw_input("keep multiplying by what: "))
times = int(raw_input("multiply how many times: "))

for _ in range(times):
    number *= multiplier

print(number)

此外,如果你观察到你正在做什么样的数学运算,可以进一步降低代码的复杂性,因为你实际上是将数字乘以另一个数字的幂,例如原始代码中的numbr * mult^cc。由于Python中的权限运算符为**,因此最终代码为:

number= int(raw_input("pick a number: "))
multiplier = int(raw_input("keep multiplying by what: "))
times = int(raw_input("multiply how many times: "))
print(number * multiplier ** times)

我发布的代码与您的代码有所不同,因为它不会将原始数字作为序列的一部分计算,但是,我将把它作为练习留给您,因为它是不是很难;)

答案 1 :(得分:0)

每次乘以一个数字,都会将其附加到列表中。您的列表正在跟踪所有999999999999999999999999999条目。随着条目越来越大,它们的速度非常快,每个条目将占用更多的内存空间。常规int将从8位开始。

你应该让程序采取用户想要的任何步骤,并使用公式计算它,而不是生成到那一点的所有值。我认为公式是:number * mult ^ cc。