第一天: 写在前面的话

每次,当我想要去做一件事情的时候,在开始的阶段常常会非常有激情。可是,过不了多久,要不是因为没时间啊,要不是因为有别的事情啊,总之就是各种各样的理由。一般情况下,我会中断它,然后去选择另一件我认为更有意思的事情。最后的结果就是前面的过程被不断的重复。

 

这就是我,这就是我目前的做事和生活方式。虽然我不喜欢,但是这就是实际情况。

 

为了让自己不至于到老的时候还是一无是处,我今天在这里写下要将SMB原型系统实现的豪言壮语。这对目前的我来说就像一座大山,一座精神上的大山。希望我能够成功的翻阅这种山,哪怕只有一次。那么我的2010年,也算过得有价值了。

 

之所以定计划为250天完成,其实也没有一个十分让人信服的理由,只是一个大概的估计。我想,这250天应该是我这个意志力上的白痴脱胎换骨的过程吧。

 

愿望是如此美好,可是谁也不能保证我不会重蹈覆辙。所以,希望大家在我泄气、逃避的时候使劲拍砖,不要手软。如果这个项目没法完成,就让这个博客彻底成为咒怨的海洋吧。:-)好像对自己有点太毒辣了,好吧,就写这么多吧。

 

 

下面来介绍我要实现的东西:

 

SMB原型系统: SMB prototype on Linux,其实就是让我在Linux上照着Samba实现个原型系统。

我要实现的SMB协议(准确点说应该是CIFS协议吧)是在Linux版本上的原型系统。微软在CIFS协议的基础上扩展一部分功能,就叫SMB协议啦。

 

按照我的理解,SMB协议应该实现异构平台之间的文件共享,在这个原型里面主要实现的是Windows和Linux之间互通有无。

 

SMB协议是CIFS的核心部分,各个厂商对其有SMB协议进行了不同程度的扩展。而在微软来说,它则将SMB构架在NETBIOSfuhe , 

, TCP/IP之上,而在linux来说,由于不支持NETBIOS,只能实现在TCP/IP之上了。

 

由于SMB协议本身的不同实现,所以便有了所谓的不同口味,就像我们有的人爱吃甜的,有的人爱吃算的。Dialects不同,则对SMB

协议核心进行扩展不同。

 

 

参考资料:

1. MS SMB specification doc, http://msdn.microsoft.com/en-us/library/cc246231(PROT.13).aspx

2. CIFS implementation, http://ubiqx.org/cifs/

3. Samba, http://www.samba.org/

4. CIFS source code, http://ubiqx.org/libcifs/

 

邮件列表(记得时刻和大家分享你的快乐和痛苦):

1. Samba-Tng maillist http://wiki.samba-tng.org/doku.php/pages/mailinglists

2. Microsoft CIFS maillist, http://discuss.microsoft.com/archives/cifs.html

<think>嗯,用户想不用函数来编一个日期在一年中是第几天的程序。首先,我需要理解这个问题的要求。不用函数的话,可能意味着不能直接调用内置的日期函数或者库,比如Python中的datetime模块。那只能手动计算了。 那步骤应该是怎样的呢?首先,得获取用户输入的年、月、日。然后,需要计算从1月到输入月份的前一个月每个月的天数之和,再加上当月的天数。关键在于处理闰年的二月天数,闰年判断条件是能被4整除但不能被100整除,或者能被400整除。 比如,用户输入2024年3月1日,2024年是闰年,所以二月有29天。计算前两个月(1月和2月)的天数总和,再加1天,就是31 + 29 +1 = 61天,也就是第61天。 那具体怎么实现呢?首先,输入年月日,可能需要用split分割字符串。然后,需要将月份转换为整数,因为要循环到前一个月。比如月份是3月,就要累加1月和2月的天数。 接下来处理每个月的天数。平年和闰年的二月天数不同,所以需要先判断是否是闰年。可以用条件判断,比如年份能被4整除但不能被100整除,或者能被400整除,则是闰年,二月29天,否则28天。 然后,创建一个月份天数的列表。比如,非闰年的话,是[31,28,31,30,...],闰年则是二月改为29天。不过,可能更高效的方式是在循环中判断是否是二月,并且是否是闰年。或者,先创建一个列表,根据闰年情况调整二月的天数。 比如,先初始化一个列表months_days = [31,28,31,30,...],然后如果是闰年,就把months_days[1]改为29。然后,累加前month-1个月的天数总和,加上当月的天数。 那具体的代码结构应该是怎样的呢?比如,输入一个日期字符串,比如"2024-03-01",然后分割成year, month, day。注意转换数据类型为整数。然后判断是否是闰年,调整二月的天数。然后计算前面几个月的总天数,再加上day。 比如代码步骤: 1. 输入日期,按“-”分割得到年、月、日。 2. 转换年月日为整数。 3. 判断闰年。 4. 创建各月份天数列表,如果是闰年,二月改为29天。 5. 计算前month-1个月的天数总和。 6. 总和加上day,得到结果。 那需要处理错误情况吗?比如用户输入2月30日,这样的无效日期。但题目可能假设输入是合法的,所以暂时不考虑校验。 测试一下,比如输入2020-03-01,闰年,总天数是31(1月) +29(2月) +1=61天。正确。如果是平年,比如2021-03-01,则是31+28+1=60天。 那代码的大体结构应该是这样的: date_str = input("请输入日期(格式:YYYY-MM-DD):") year, month, day = map(int, date_str.split('-')) # 判断闰年 is_leap = (year %4 ==0 and year%100 !=0) or (year%400 ==0) months_days = [31,28,31,30,31,30,31,31,30,31,30,31] if is_leap: months_days[1] =29 total = sum(months_days[:month-1]) + day print(total) 这样就完成了。不用任何函数的话,可能sum函数也是内置函数,但题目可能允许,因为用户指的是不自己定义函数,或者不使用日期处理函数。可能需要确认,但通常sum是可以使用的。这样代码是可行的。</think>要计算一个日期在一年中是第几天,可以通过以下步骤手动实现(不使用日期函数): ### 步骤分析 1. **输入处理**:获取年、月、日。 2. **闰年判断**:根据年份判断是否为闰年(二月天数不同)。 3. **月份天数表**:列出每个月的天数,并根据闰年调整二月天数。 4. **累加天数**:累加前几个月的天数,再加上当前月的天数。 --- ### 实现代码 ```python date_str = input("请输入日期(格式:YYYY-MM-DD):") year, month, day = map(int, date_str.split('-')) # 判断闰年 is_leap = (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0) # 定义各月份天数 months_days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] if is_leap: months_days[1] = 29 # 闰年二月改为29天 # 计算总天数 total_days = sum(months_days[:month-1]) + day print(f"这一天是{year}年的第{total_days}天") ``` --- ### 关键逻辑解释 1. **闰年规则**: - 能被4整除但不能被100整除,或能被400整除的年份为闰年。 - 例如:2000年是闰年,1900年不是闰年。 2. **月份天数表**: - 平年:$$[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]$$ - 闰年:将二月天数改为29。 3. **累加计算**: - 若输入月份为3月(month=3),则累加1月和2月的天数。 - 公式:$$ \text{总天数} = \sum_{i=1}^{\text{month}-1} \text{months\_days}[i-1] + \text{day} $$ --- ### 示例验证 输入 `2024-03-01`: 1. 2024年是闰年,二月有29天。 2. 前两个月天数总和:$$31 + 29 = 60$$ 3. 总天数:$$60 + 1 = 61$$ 输出:`这一天是2024年的第61天`。
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值