Advertisement

Python生物信息学数据管理——第11、12章课后习题

阅读量:

#初学小白,仅供参考
11.1/2/3 创建一个类,从类中创建对象,让类可以打印

复制代码
    class Channel:
    def __init__(self,name,code,phi,psi):
        self.code=code
        self.name=name
        self.phi=phi
        self.psi=psi
    def __repr__(self):
        return 'name:{}\tcode:{}\tphi:{}\tpsi:{}'.format(self.name,self.code,self.phi,self.psi)
    def printproperty(self):
        return 'name:{}\ncode:{}\nphi:{}\npsi:{}\n'.format(self.name, self.code, self.phi, self.psi)
    channal1=Channel('Potassium channal','1jvm',354.2,351.7)
    channel2=Channel('Mechanosensitivity channel','1msl',359.2,345.7)
    print(channal1)
    print(channel2.printproperty())

11.4 为类创建一个单独的模块

复制代码
    from proteinchannel import Channel
    channel3=Channel('Chloride channel','1kpl',361.3,344.6)
    print(channel3)

11.5 用方法执行类

复制代码
    from math import sqrt
    class DendriticLengths:
    def __init__(self,list):
        self.data=[]
        for line in open(list):
            length=float(line.strip())
            self.data.append(length)
    def get_average(self):
        total=sum(self.data)
        self.average=total/len(self.data)
        return self.average
    def get_sttddev(self):
        variance=0
        for num in self.data:
            variance+=(num-self.average)**2
        self.sttddev=sqrt(variance/len(self.data))
        return self.sttddev
    def __repr__(self):
        return 'Data set with {} dendritic lengths'.format(len(self.data))
    
    n=DendriticLengths('neuron_lengths.txt')
    print(n)
    print(n.get_average())
    print(n.get_sttddev())

12.1/12.2 调试12.2.2节的Python会话

复制代码
    import pdb
    def evaluate_data(data, lower=100, upper=300):
    """Counts data points in three bins."""
    smaller = 0
    between = 0
    bigger = 0
    for length in data:
        if length < lower:
            smaller = smaller + 1
        elif lower < length < upper:
            between = between + 1
        elif length > upper:
            bigger += 1
    return smaller, between, bigger
    
    def read_data(filename):
    """Reads neuron lengths from a text file."""
    primary, secondary = [], []
    
    for line in open(filename):
        category, length = line.split("\t")
        length = float(length)
        if category == "Primary":
            primary.append(length)
        elif category == "Secondary":
            secondary.append(length)
    return primary, secondary
    
    def write_output_file(filename, count_pri, count_sec):
    """Writes counted values to a file."""
    output = open(filename, "w")
    output.write("category      <100  100-300   >300\n")
    output.write("Primary  :  %5i   %5i   %5i\n" % count_pri)
    output.write("Secondary:  %5i   %5i   %5i\n" % count_sec)
    output.close()
    
    try:
    primary, secondary = read_data('neuron_data.txt')
    except IOError:
    print("The filename somehow is wrong.")
    raise SystemExit
    else:
    count_pri = evaluate_data(primary)
    count_sec = evaluate_data(secondary)
    write_output_file('results.txt', count_pri, count_sec)

12.3/12.4 文件和数字异常情况处理

复制代码
    import numpy as np
    try:
    fo=open('neuron_lengths.txt','r')
    except FileNotFoundError:
    print("filename is wrong")
    else:
    list=[]
    for line in fo:
        try:
            list.append(float(line.strip()))
        except:
            print("There are something that couldn't be converted to float")
    print(np.mean(list))
    print(np.std(list))

12.5 标准输入和数字的异常情况处理

复制代码
    import numpy as np
    input_numbers=[]
    number=None
    while number != 'q':
    number=input('Insert a number:')
    input_numbers.append(number)
    ls0=[]
    for i in input_numbers:
    try:
        ls0.append(float(i))
    except:
        pass
    print(np.mean(ls0))
    print(np.std(ls0))

全部评论 (0)

还没有任何评论哟~