使用python中的浮点编号的while语句

发布于 2025-01-31 18:42:26 字数 1349 浏览 2 评论 0原文

我试图使用 循环在Python中使用将长字符串插入短字符串中。当我在语句中使用浮动点号时,我会得到意外的行为。预计以下代码将返回5个5个字母的20箱:

sequence = 'TTAGAGGAAATATGAAAACCCTAGAATCGGAAGAAAACTATATATGTATATCTTTCCGTTGACTTTATATAGAATGAAATCAAGGAAAGAAAAGAGCTAA'
seqLength = len(sequence)
bins = 20
binLength = int(round(seqLength / bins))

leftFrame = 0
rightFrame = 0.05
subSeqs = []
while rightFrame <= 1.0:
    subSeq = sequence[int(round(leftFrame * seqLength)) : int(round(rightFrame * seqLength))]
    subSeqs.append(subSeq)
    leftFrame, rightFrame = rightFrame, rightFrame + 0.05

print(f"The sequence is {seqLength} nucleotides. Each bin is {binLength} nt long.")
print(subSeqs, "\n", len(subSeqs))

此返回:

The sequence is 100 nucleotides. Each bin is 5 nt long.
['TTAGA', 'GGAAA', 'TATGA', 'AAACC', 'CTAGA', 'ATCGG', 'AAGAA', 'AACTA', 'TATAT', 'GTATA', 'TCTTT', 'CCGTT', 'GACTT', 'TATAT', 'AGAAT', 'GAAAT', 'CAAGG', 'AAAGA', 'AAAGA'] 
 19

但是,用替换第9行,而RightFrame&lt; = 1.01:返回正确的输出:

The sequence is 100 nucleotides. Each bin is 5 nt long.
['TTAGA', 'GGAAA', 'TATGA', 'AAACC', 'CTAGA', 'ATCGG', 'AAGAA', 'AACTA', 'TATAT', 'GTATA', 'TCTTT', 'CCGTT', 'GACTT', 'TATAT', 'AGAAT', 'GAAAT', 'CAAGG', 'AAAGA', 'AAAGA', 'GCTAA'] 
 20

添加14个零(1.000000000000001)很好,但是第15个零会再次打破。我应该如何避免这个问题?非常感谢。

I am trying to bin a long string into short strings using a while loop in Python. I get unexpected behavior when I use a floating point number in the while statement. The following code is expected to return 20 bins of 5 letters each:

sequence = 'TTAGAGGAAATATGAAAACCCTAGAATCGGAAGAAAACTATATATGTATATCTTTCCGTTGACTTTATATAGAATGAAATCAAGGAAAGAAAAGAGCTAA'
seqLength = len(sequence)
bins = 20
binLength = int(round(seqLength / bins))

leftFrame = 0
rightFrame = 0.05
subSeqs = []
while rightFrame <= 1.0:
    subSeq = sequence[int(round(leftFrame * seqLength)) : int(round(rightFrame * seqLength))]
    subSeqs.append(subSeq)
    leftFrame, rightFrame = rightFrame, rightFrame + 0.05

print(f"The sequence is {seqLength} nucleotides. Each bin is {binLength} nt long.")
print(subSeqs, "\n", len(subSeqs))

This returns:

The sequence is 100 nucleotides. Each bin is 5 nt long.
['TTAGA', 'GGAAA', 'TATGA', 'AAACC', 'CTAGA', 'ATCGG', 'AAGAA', 'AACTA', 'TATAT', 'GTATA', 'TCTTT', 'CCGTT', 'GACTT', 'TATAT', 'AGAAT', 'GAAAT', 'CAAGG', 'AAAGA', 'AAAGA'] 
 19

However, replacing line 9 with while rightFrame <= 1.01: returns the correct output:

The sequence is 100 nucleotides. Each bin is 5 nt long.
['TTAGA', 'GGAAA', 'TATGA', 'AAACC', 'CTAGA', 'ATCGG', 'AAGAA', 'AACTA', 'TATAT', 'GTATA', 'TCTTT', 'CCGTT', 'GACTT', 'TATAT', 'AGAAT', 'GAAAT', 'CAAGG', 'AAAGA', 'AAAGA', 'GCTAA'] 
 20

Adding up to 14 zeros (1.000000000000001) is fine, but a 15th zero breaks it again. How should I avoid this issue? Thanks very much.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文