一、费解的题目
请问作者你这个脑回路是挺惊奇的。我既然能用Zeller直接算出具体星期几,我还需要用6-13里那么费劲的从1800年1月1日开始算吗? 你直接说把4.21题改成带函数的不就行了吗?还简化,简化什么??你是不知道该出什么题了吗???如果有一天我能看到作者本人。我一定亲自问问他书里那些让我发狂的问题。是在何时何地弄出来的
二、我今天的发现-不是我认为的6.32满意答案
我在按照脑回路十分惊奇的作者(简称惊奇大师)的要求来简化的过程中。发现了给变量制作替身的重要性。
下面是4.21题我做了第7遍后的代码
特别说明里面有关字典和列表的使用不是1到4章的内容。想参考纯粹前4章内容的朋友请回到之前的文章
第4章里没有循环的内容。所以我下面的代码是正确的,而且是很有效的,但是当我引入循环的时候问题出现了
h_dic = {0: "星期六", 1: "星期日", 2: "星期一", 3: "星期二", 4: "星期三", 5: "星期四", 6: "星期五"}
m_dic = {13: "一月", 14: "二月", 3: "三月", 4: "四月", 5: "五月", 6: "六月", 7: "七月", 8: "八月", 9: "九月",
10: "十月", 11: "十一月", 12: "十二月"}
year_input = eval(input("Enter year:(e,g., 2008): "))
month_input = eval(input("Enter month: 1-12: "))
day_input = eval(input("Enter the day of the month: 1-31: "))
if month_input == 1 or month_input == 2:
year_input -= 1
month_input += 12
k = year_input % 100
j = year_input // 100
else:
year_input = year_input
month_input = month_input
k = year_input % 100
j = year_input // 100
h_method = (day_input + ((26 * (month_input + 1)) // 10) + k + (k // 4) + (j // 4) + 5 * j) % 7
print(f"Day of the week is {h_dic[h_method]}, month {m_dic[month_input]}, day {day_input}")
运行结果如下,不多多示范了。同学们可以自己截图
接下来我们利用for循环,我们先看直接引入的后果
好我们先看
首先 年份发生了变化Zeller的一致性,要求1月2月分别加12并且减去1年来计算。可是按原4.21的代码直接变成for循环不仅结果不对,整个年还出现了锐减的情况。
但当我建立了year_num和把month_input后。首先建立year_num他读取了year_input的值,然后让他来完成1月和2月的运算。然后将for 循环的i指向给month_input。让他随着i变化。而不打扰的i的运行。
代码如下:
h_dic = {0: "星期六", 1: "星期日", 2: "星期一", 3: "星期二", 4: "星期三", 5: "星期四", 6: "星期五"}
m_dic = {13: "一月", 14: "二月", 3: "三月", 4: "四月", 5: "五月", 6: "六月", 7: "七月", 8: "八月", 9: "九月",
10: "十月", 11: "十一月", 12: "十二月"}
year_input = eval(input("Enter year:(e,g., 2008): "))
for i in range(1, 13):
month_input = i
year_num = year_input
if month_input == 1 or month_input == 2:
year_num -= 1
month_input += 12
k = year_num % 100
j = year_num // 100
h_method = (1 + ((26 * (month_input + 1)) // 10) + k + (k // 4) + (j // 4) + 5 * j) % 7
print("1-2", month_input)
print("year", year_input,year_num)
else:
year_input = year_input
month_input = month_input
k = year_input % 100
j = year_input // 100
h_method = (1 + ((26 * (month_input + 1)) // 10) + k + (k // 4) + (j // 4) + 5 * j) % 7
print("3-12", month_input)
print("year", year_input)
print(f"Day of the week is {h_dic[h_method]}, month {m_dic[month_input]}, day 1")
这个介绍其实很基础,说的这里我翻看了我第5章第30题的解题步骤发现了别上面这个更简单循环代码。也是解答zeller的问题。只不过不是打印每个月的1日是星期几。仅供大家参考用
month_dist = {13: "January", 14: "February", 3: "March", 4: "April", 5: "May", 6: "June", 7: "July", 8: "August",
9: "September", 10: "October", 11: "November", 12: "December"}
week_dist = {2: "Monday", 3: "Tuesday", 4: "Wednesday", 5: "Thursday ", 6: "Friday", 0: "Saturday", 1: "Sunday"}
year_data, month_data, input_data = 2023, 1, 1
year_data_type = year_data
after_years = year_data - 1
for i in range(month_data, 13):
if i <= 2:
i += 12
year_data = after_years
elif i >= 3:
i = i
year_data = year_data_type
j = year_data // 100
k = year_data % 100
m1 = (26 * (i + 1)) // 10
w_day = (input_data + m1 + k + (k // 4) + (j // 4) + (5 * j)) % 7
print(month_dist[i], input_data, year_data_type, "is", week_dist[w_day])
结果如下:
谢谢观赏!多多点赞收藏!