Python 计算思维训练——字典与字符串练习

Python 计算思维训练——字典与字符串练习(一)

基于表格创建字典 - 物理常数存储

#coding=utf-8
import re
# 请在此处填写代码
#********** Begin **********#
f =open('src/step1/constants.txt','r')
constants = {}
count =0
for i in f:
     count=count+1
     if count>2:   
        j=re.split('\s{2,}',i)
        constants[j[0]]=float(j[1])
print(constants)
#********** End **********#

字符串操作 - 物质名称缩写

#coding=utf-8
import re
def read_densities1(filename):
    # 请在此处填写代码
    # ********** Begin **********#
    f=open(filename,'r')
    dirt1={}
    for i in f:
      list1=re.split('\s{2,}',i.rstrip('\n'),2,re.U)
      dirt1[list1[0]]=eval(list1[1])
    return dirt1
    # ********** End **********#

def read_densities2(filename):
    # 请在此处填写代码
    # ********** Begin **********#
    f=open(filename,'r')
    dirt1={}
    for i in f:
      list1=i.rstrip('\n').split()
      str1=' '.join(list1[0:len(list1)-1])
      dirt1[str1]=eval(list1[-1])
    return dirt1
    # ********** End **********#

def test_densities(filename):
    # 请在此处填写代码
    # ********** Begin **********#
    if read_densities2(filename)==read_densities1(filename):
        return True
    else :
        return False    
    # ********** End **********#

结构文件解析与绘图 - 解释程序的输出

#coding=utf-8
import warnings
warnings.filterwarnings("ignore")
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt


# 请在此处填写代码
#********** Begin **********#
f =open('src/step3/insum.txt','r')
epsilon=[]
n=[]
for i in f:
    i=i.rstrip('\n')
    epsilon.append(eval(i[9:15]))
    n.append(eval(i[i.find('=')+1:len(i)]))           
plt.semilogy(n, epsilon)     
#********** End **********#

plt.savefig('src/step3/output/result.jpg')

制作字典

#coding=utf-8

# 请在此处填写代码
#********** Begin **********#
data={}
data['Alpha Centauri A']=1.56
data['Alpha Centauri B']=0.45
data['Alpha Centauri C']=0.00006
data['Barnard’s Star']=0.0005
data['Wolf 359']=0.00002
data['BD +36 degrees 2147']=0.006
data['Luyten 726-8 A']=0.00006
data['Luyten 726-8 B']=0.00004
data['Sirius A']=23.6
data['Sirius B']=0.003
data['Ross 154']=0.0005
print(data)

#********** End **********#

嵌套字典 - 星体物理数据存储

#coding=utf-8

# 请在此处填写代码
#********** Begin **********#
data={'Alpha Centauri A':{}, 'Alpha Centauri B':{}, 'Alpha Centauri C':{}, 'Barnard’s Star':{}, 'Wolf 359':{}, 'BD +36 degrees 2147':{}, 'Luyten 726-8 A':{}, 'Luyten 726-8 B':{}, 'Sirius A':{}, 'Sirius B':{}, 'Ross 154':{}}
data['Alpha Centauri A']={'distance':4.3,'apparent brightness':0.26,'luminosity':1.56}
data['Alpha Centauri B']={'distance':4.3,'apparent brightness':0.077,'luminosity':0.45}
data['Alpha Centauri C']={'distance':4.2,'apparent brightness':0.00001,'luminosity':0.00006}
data['Barnard’s Star']={'distance':6.0,'apparent brightness':0.00004,'luminosity':0.0005}
data['Wolf 359']={'distance':7.7,'apparent brightness':0.000001,'luminosity':0.00002}
data['BD +36 degrees 2147']={'distance':8.2,'apparent brightness':0.0003,'luminosity':0.006}
data['Luyten 726-8 A']={'distance':8.4,'apparent brightness':0.000003,'luminosity':0.00006}
data['Luyten 726-8 B']={'distance':8.4,'apparent brightness':0.000002,'luminosity':0.00004}
data['Sirius A']={'distance':8.6,'apparent brightness':1.00,'luminosity':23.6}
data['Sirius B']={'distance':8.6,'apparent brightness':0.001,'luminosity':0.003}
data['Ross 154']={'distance':9.4,'apparent brightness':0.00002,'luminosity':0.0005}

a=input()
b=input()

print(data[a][b])
#********** End **********#

Python 计算思维训练——字典与字符串练习(二)

  1. 从文件中创建嵌套字典(1)
#coding=utf-8

# 请在此处填写代码
#********** Begin **********#
path = "src/step1/human_evolution.txt"
f = open(path)
humans = {}
for i in f:
    if len(i.split()) > 0 and i.split()[0] == "H.":
        subdic = {}
        subdic ["Lived when"] = ''.join(i[21:37].split())
        subdic ["height"] = ''.join(i[37:50].split())
        subdic ["mass"] = ''.join(i[50:62].split())
        subdic ["Brain volume"] = ''.join(i[62:].split())
        humans [ "homo " + ''.join(i[2:20].split())] = subdic

print("Species                  Lived when     height(m)      mass(kg)       Brain volume(cm**3)      ")
for i in humans:
    print("%-25s%-15s%-15s%-15s%-25s"%(i,humans[i]['Lived when'],humans[i]['height'],humans[i]['mass'],humans[i]['Brain volume']))
#********** End **********#

  1. 从文件中创建嵌套字典(2)
#coding=utf-8
import warnings
warnings.filterwarnings("ignore")
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
from numpy import *

# 请补充完善以下函数:
# question 1
def load_data(path):
    #********** Begin **********#
    t = {}
    f = open(path)
    for i in f:
        t2 = {}
        if len(i.split()) > 0 and i.split()[0] != '#':
            t2["C"] = eval(i[17:23])
            t2["T_0"] = eval(i[23:32])
            t2["mu_0"] = eval(i[32:])
            t[i[:17].strip()] = t2
    return t



    #********** End **********#

# question 2
def mu(T, gas, mu_data):
    #********** Begin **********#
    u = mu_data[gas]['mu_0']
    t = mu_data[gas]["T_0"]
    c = mu_data[gas]['C']
    return u*(t-c)/(T+c)*(T/t) ** 1.5



    #********** End **********#

# question 3
def drawing(air, carbon_dioxide, hydrogen):
    x = linspace(223, 373, 200)       # 生成 x 轴坐标点范围[223, 373],点个数200
    #********** Begin **********#
    plt.plot(x,air,label = 'air')
    plt.plot(x,carbon_dioxide,label="carbon dioxide")
    plt.plot(x,hydrogen,label= 'hydrogen')
    plt.legend()


    #********** End **********#
    plt.savefig('src/step2/output/result.jpg')
  1. 字典数据存储 - 计算三角形面积
#coding=utf-8

# 请在此处填写代码
#********** Begin **********#
vertices = eval(input())
# s = vertices[2][0] - vertices[1][0]
# h = vertices[3][1] - vertices[1][1]
ab = pow((vertices[1][0]-vertices[2][0]) ** 2 + (vertices[1][1]-vertices[2][1]) ** 2 ,0.5)
ac = pow((vertices[1][0]-vertices[3][0]) ** 2 + (vertices[1][1]-vertices[3][1]) ** 2 ,0.5)
bc = pow((vertices[2][0]-vertices[3][0]) ** 2 + (vertices[2][1]-vertices[3][1]) ** 2 ,0.5)
p =( ab + ac + bc)/2
s = pow(p * (p - ab) * (p - ac) * (p - bc),0.5)
print("%.1f"%s)
#********** End **********#

  1. 采用不同数据结构来表示多项式
#coding=utf-8

poly_list = [-0.5]+[0]*99+[2]
poly_dic = {0: -0.5, 100: 2}

def eval_poly_dict(poly_dict, x):
    # ********** Begin **********#
    keys = list(poly_dict.keys())
    sum_dict = (keys[0] + 1) * poly_dict[0]
    sum_dict += poly_dict[keys[1]]*pow(x,keys[1])
    return sum_dict
    # ********** End **********#


def eval_poly_list(poly_list, x):
# ********** Begin **********#
    sum_list = poly_list[0]
    num = poly_list.count(0)+1
    sum_list += pow(x,num)*poly_list[-1]
    return sum_list
# ********** End **********#
  1. 计算多项式的导数
#coding=utf-8

def diff(poly_dict):
    # 请在此处填写代码
    #********** Begin **********#
    t = {}
    for i in poly_dict:
        if i != 0:
            t[i-1] = i*poly_dict[i]
    return t
    #********** End **********#

  1. 比较不同城市的平均气温
#coding=utf-8
import warnings
warnings.filterwarnings("ignore")
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt

# 请补充完善以下函数:
# question 1
def load_data(path):
    #********** Begin **********#
    t = {}
    f = open(path)
    for i in f:
        if "mso-list:" in i and len(i.split())>3:
            city = i.split('>')[2].split()[0].split("<")[0]
        if "ftp.engr.udayton.edu" in i:
            t[city] = i.split('"')[1].split('/')[-1]
    return t

    #********** End **********#

# question 2
def city_temp(city,city_file):
    # ********** Begin **********#
    fname = "src/step6/city_temp/" + city_file[city]
    f = open(fname)
    t ={}
    for i in f:
        ws = i.split()
        ws = [eval(d) for d in ws]
        t[(ws[2],ws[0],ws[1])] = ws[3]
    return t


    # ********** End **********#


# question 3
def plot_temp(city, city_file, year):
    # ********** Begin **********#
    fname = "src/step6/city_temp/" + city_file[city]
    f = open(fname)
    t =[]
    for i in f :
        ws = i.split()
        ws = [eval(d) for d in ws ]
        if ws[2] == year:
            t .append(ws[3])
    x = range(1,len(t)+1)

    plt.plot(x,t)


    # ********** End **********#
    plt.savefig('src/step6/output/result.jpg')     # 保存绘制的温度图


  • 25
    点赞
  • 101
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值