使用python中的浮点编号的while语句
我试图使用 循环在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 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论