脱氧核糖核酸是一种微小的分子,存在于我们身体的每个细胞中,包含着我们身体如何生长的蓝图。它看起来像一对核苷酸分子的双螺旋结构:鸟嘌呤、胞嘧啶、腺嘌呤和胸腺嘧啶。这些用字母 G、C、A 和 T 来表示。DNA 是一个长分子;它是微观的,但是如果把它拉长,它的 30 亿个碱基对会有 2 米长!这个程序是一个简单的 DNA 动画。
当您运行dna.py时,输出将如下所示:
DNA Animation, by Al Sweigart email@protected
Press Ctrl-C to quit...
#G-C#
#C---G#
#T-----A#
#T------A#
#A------T#
#G-----C#
#G---C#
#C-G#
##
#T-A#
#C---G#
#G-----C#
#G------C#
#T------A#
#A-----T#
#C---G#
#G-C#
##
#T-A#
#T---A#
#A-----T#
`--snip--`与项目 15“深坑”和项目 20“数字雨”类似,这个程序通过打印ROWS列表中的字符串来创建滚动动画。使用format()字符串方法将 AT 和 CG 对插入到每个字符串中。
"""DNA, by Al Sweigart email@protected
A simple animation of a DNA double-helix. Press Ctrl-C to stop.
Inspired by matoken https://asciinema.org/a/155441
This code is available at https://nostarch.com/big-book-small-python-programming
Tags: short, artistic, scrolling, science"""
import random, sys, time
PAUSE = 0.15 # (!) Try changing this to 0.5 or 0.0.
# These are the individual rows of the DNA animation:
ROWS = [
#123456789 <- Use this to measure the number of spaces:
' ##', # Index 0 has no {}.
' #{}-{}#',
' #{}---{}#',
' #{}-----{}#',
' #{}------{}#',
' #{}------{}#',
' #{}-----{}#',
' #{}---{}#',
' #{}-{}#',
' ##', # Index 9 has no {}.
' #{}-{}#',
' #{}---{}#',
' #{}-----{}#',
' #{}------{}#',
' #{}------{}#',
' #{}-----{}#',
' #{}---{}#',
' #{}-{}#']
#123456789 <- Use this to measure the number of spaces:
try:
print('DNA Animation, by Al Sweigart email@protected')
print('Press Ctrl-C to quit...')
time.sleep(2)
rowIndex = 0
while True: # Main program loop.
# Increment rowIndex to draw next row:
rowIndex = rowIndex + 1
if rowIndex == len(ROWS):
rowIndex = 0
# Row indexes 0 and 9 don't have nucleotides:
if rowIndex == 0 or rowIndex == 9:
print(ROWS[rowIndex])
continue
# Select random nucleotide pairs, guanine-cytosine and
# adenine-thymine:
randomSelection = random.randint(1, 4)
if randomSelection == 1:
leftNucleotide, rightNucleotide = 'A', 'T'
elif randomSelection == 2:
leftNucleotide, rightNucleotide = 'T', 'A'
elif randomSelection == 3:
leftNucleotide, rightNucleotide = 'C', 'G'
elif randomSelection == 4:
leftNucleotide, rightNucleotide = 'G', 'C'
# Print the row.
print(ROWS[rowIndex].format(leftNucleotide, rightNucleotide))
time.sleep(PAUSE) # Add a slight pause.
except KeyboardInterrupt:
sys.exit() # When Ctrl-C is pressed, end the program. 试着找出下列问题的答案。尝试对代码进行一些修改,然后重新运行程序,看看这些修改有什么影响。
- 如果把第 42 行的
rowIndex = rowIndex + 1改成rowIndex = rowIndex + 2会怎么样? - 如果把 53 行的
random.randint(1, 4)改成random.randint(1, 2)会怎么样? - 如果将第 9 行的
PAUSE = 0.15设置为PAUSE = -0.15,会得到什么错误信息?
