鲸落:2.1_气象Python中常用的基本库

欢迎使用Markdown编辑器

你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

题目:STEP1: 按照要求计算下方题目结果

Q1: 读取/home/mw/input/fnl6384/fnl/文件夹下所有 GRIB2 文件,计算其中最早和最晚两个时间之间相差多少小时。然后对这个小时值求 sin 值。请问这个值的前 5 位有效数字是多少?

提示:

注意什么是有效数字,及其“四舍六入五留双”的修约规则。如,0.12345 的 前 4 位有效数字为 1234。
在下方 cell 中编写并运行你的代码,将结果赋值给 a1。

# 正确的一个,也是参考的cddn上一位老哥的
import os
from datetime import datetime,timedelta
import math

file_name = os.listdir("/home/mw/input/fnl6384/fnl/")
file_name
b=[]
for i in range(len(file_name)):
    b.append(file_name[i][-20:-6])
b.sort()
b

time1=datetime.strptime(b[0],"%Y%m%d_%H_%M")
time2=datetime.strptime(b[-1],"%Y%m%d_%H_%M")
time1
deltaday=(time2-time1).days
deltasecond=(time2-time1).seconds
hours1=deltaday*24+deltasecond/3600
print(hours1)
c=math.sin(hours1)
print(c)
a1 = 27085

提交了很多次,都出错了,我死活找不大是哪错了,最后发现,之前用的是math.sin(radians())<在这里就错了,这个radians 直接算就好,根本不用转弧度>

# 这个是错的,但是里面还是有些东西可以用的-.0
import os  # 导入os模块
import math
from datetime import datetime # 导入datetime

# 计算时间差
def calc_hours(old_time,new_time):
    days = (new_time - old_time).days
    sec = (new_time - old_time).seconds
    hours = days * 24 + round(sec/3600, 3)
    return hours
    time_timedate = datetime.strptime(time_str, "%Y%m%d%h%m")
    file_time_list.append(time_timedate)
    print(file_time_list)

# 保留n位有效位数
def round_half_up(num, ndigits):
    # 将数字转化为字符串,方便进行字符操作
    num_str = str(num)
    # 找到小数点位置
    decimal_pos = num_str.find('.')
    if decimal_pos == -1:
        return num
    # 计算需要保留的小数位数
    digits = len(num_str) - decimal_pos - 1
    if ndigits >= digits:
        return num
    # 将要保留的小数位四舍五入
    round_num = int(num_str[decimal_pos + ndigits + 1])
    if round_num > 5 or (round_num == 5 and int(num_str[decimal_pos + ndigits]) % 2 != 0):
        # 向上进位
        num_str = num_str[:decimal_pos + ndigits] + str(int(num_str[decimal_pos + ndigits]) + 1)
    else:
        # 向下舍去
        num_str = num_str[:decimal_pos + ndigits]
    # 返回结果
    return float(num_str)

# 取有效位数为一个字符串
def get_valid_digits(num, n):
    num_str = str(num)
    dot_pos = num_str.index('.')
    # 获取有效数字的整数部分和小数部分字符
    int_part = num_str[:dot_pos]
    dec_part = num_str[dot_pos+1:]
    # 截取有效数字的小数部分
    valid_dec = dec_part[:n]
    # 拼接整数部分和有效小数部分,返回结果 
    if abs(num) >= 1 :
        return int_part + valid_dec
    else:
        return valid_dec 



# 读取数据,找到最早时间和最晚时间
file_name = os.listdir("/home/mw/input/fnl6384/fnl/") # 列出path目录下所有的文件和目录名
file_time_list = []
for i in file_name:
    time_str = "".join(list(filter(str.isdigit, i)))
    time_real_str = time_str[0:-3]
    #print(time_real_str) # 先打印一下出来看一下格式,是否要去掉一部分
    time = datetime.strptime(time_real_str, '%Y%m%d%H')
    #print(time)
    file_time_list.append(time)
    
# 找到最早最晚时间并计算时间差    
# print(type(file_time_list))
old_time = min(file_time_list)
new_time = max(file_time_list)
# print(old_time)
diff = calc_hours(old_time,new_time)

sin = math.sin(math.radians(diff)) # 计算sin值
print(sin)
diff_5 = round_half_up(sin,5) # 计算保留5位的差值
print(diff_5)
a1 = str(30902)
print(type(a1))
print(a1)
hours1 = 738
print(math.sin(math.radians(738)))
c=math.sin(hours1)
print(c)

东西感觉不很难,但是错误不是很好找.(因为他的一句话,我每次都改成弧度制…后来看网上的这个才发现是我错了.)
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卢比扬卡包食宿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值