简化这段Python代码

5 投票
7 回答
1461 浏览
提问于 2025-04-16 06:08

我写了一个程序来检查我在纸上想的解决方案是否正确(结果是对的)。

任务是:计算从10到200的所有数字相乘后,结果末尾有多少个零。

答案是48个,这个手动计算起来很简单。

我从来没有认真写过Python,这就是我写的代码:

mul = 1
for i in range(10, 200 + 1):
    mul *= i

string = str(mul)
string = string[::-1]
count = 0;
for c in str(string):
    if c == '0':
        count += 1
    else:
        break

print count
print mul

我敢打赌,用Python这样的语言可以写得更优雅一些。

补充一下:是的,这个是作业,但不是我的——我只是帮了一个朋友;-)

7 个回答

4

在编程中,有时候我们需要处理一些数据,这些数据可能是从用户那里输入的,或者是从其他地方获取的。为了让程序能够理解这些数据,我们通常需要对它们进行一些处理。

比如说,如果我们有一个数字的列表,我们可能想要计算这些数字的总和,或者找出其中最大的数字。这些操作在编程中是非常常见的。

另外,程序在运行的时候可能会遇到一些错误,比如输入的数据格式不对,或者计算过程中出现了问题。为了让程序能够顺利运行,我们需要在代码中加入一些检查,确保数据是正确的。

总之,处理数据和错误是编程中非常重要的部分,掌握这些技能可以帮助我们写出更好的程序。

print sum(1 + (not i%25) + (not i%125) for i in xrange(10,201,5))
6
import math

answer = str(math.factorial(200) / math.factorial(9))
count = len(answer) - len(answer.rstrip('0'))

下面是一些步骤:

  1. 导入数学库
  2. 计算200的阶乘,然后去掉前面9个数字
  3. 把右边的零去掉,看看长度有什么变化
11

这是一个简单的实现方法,不需要计算阶乘(这样可以处理大数字,比如2000000的阶乘!)(已编辑):

fives = 0
twos = 0
for i in range(10, 201):
   while i % 5 == 0:
      fives = fives + 1
      i /= 5
   while i % 2 == 0:
      twos = twos + 1
      i /= 2
print(min(fives, twos))

撰写回答