2

我正在学习 Python 入门课程,我们有一个作业要求我们模拟浮点数的存储方式。

基本上,我们必须演示 5 位尾数。例如,您输入123,它必须以12300. 如果您输入12345678,它必须以12345. 如何才能做到这一点?有这个功能还是只是一个格式化问题?请记住,这是一门入门课程,我们不允许使用任何外部库。

4

2 回答 2

2

您可以使用 Python 的字符串格式化功能

'{:<05d}'.format(number)[:5]

一些例子:

>>> '{:<05d}'.format(123)[:5]
'12300'
>>> '{:<05d}'.format(12345678)[:5]
'12345'

一些澄清:

  • <说:对齐左边的数字。
  • 0说:0用作填充字符。
  • 5说:将宽度设置为至少五。
  • d说:这是一个小数。

由于数字可能超过五位数字,因此我们只取前五个字符[:5]。这称为切片表示法,它允许您获取字符串的切片。

于 2013-11-06T18:42:07.927 回答
1

所以,让我们试着解决这个问题,并编写我们必须做的粗略框架。请注意,每当我遇到不是立即显而易见的问题时,我都会将其推送到自己的函数中,以便稍后处理:

string = str(number)
if len(string) > 5:
    string = truncate_string(string)
elif len(string) < 5:
    string = pad_string_with_zeros(string)

所以,让我们尝试实现truncate_stringand pad_string_with_zeros


字符串基本上是一个字符列表。我们如何获得列表的前 5 个元素?通过列表切片。因此,我们可以truncate_string这样实现:

def truncate_string(string):
    return string[:5]

我们如何用零填充字符串?好吧,如果你查阅 Python 文档,你可以使用这个ljust函数:

>>> '11'.ljust(5, '0')
'11000'
>>> '12345678'.ljust(5, '0')
'12345'

因此,我们的功能可能是:

def pad_string_with_zeros(string):
    return string.ljust(5, '0')

或者,我们可以使用while循环:

def pad_string_with_zeros(string):
    while len(string) < 5:
        string += '0'

...虽然这样效率会更低。


如果我们将所有函数都移到主代码中,那么我们可能会得到这样的结果:

string = str(number)
if len(string) > 5:
    string = string[:5]
elif len(string) < 5:
    string = string.ljust(5, '0')

事实证明,列表切片不会抛出错误,即使你传入的字符串太小或太大。例如,'12'[:5]将导致字符串'12'.

因此,我们甚至不需要检查字符串的大小,并且可以将其压缩为以下几行:

string = str(number)
string = string[:5].ljust(5, '0')
于 2013-11-06T18:52:57.033 回答