我正在学习Python课程,我们有一个作业,要求我们模拟浮点数的存储方式。
基本上,我们必须演示5位数的尾数。例如,您输入了123
,它必须以12300
形式出现。如果您输入12345678
,则必须输入12345
。如何才能做到这一点?是否有功能或仅仅是一个形式问题?请记住,这是一门入门课程,我们不允许使用任何外部库。
答案 0 :(得分:2)
您可以使用Python的string formatting functionality:
'{:<05d}'.format(number)[:5]
一些例子:
>>> '{:<05d}'.format(123)[:5]
'12300'
>>> '{:<05d}'.format(12345678)[:5]
'12345'
一些澄清:
<
说:对齐左边的数字。0
说:使用0
作为填充字符。5
说:将宽度设置为至少五。d
说:它是小数。由于数字可能超过五位数,我们只需要通过[:5]
获取前五个字符。这称为slice notation,它允许您拍摄一个字符串片段。
答案 1 :(得分:1)
所以,让我们尝试解决问题,并编写我们必须做的粗略框架。请注意,每当我遇到一个不是很明显的问题时,我会把它推入自己的函数中,我可以稍后处理它:
string = str(number)
if len(string) > 5:
string = truncate_string(string)
elif len(string) < 5:
string = pad_string_with_zeros(string)
所以,让我们尝试实施truncate_string
和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')