鱼C论坛

 找回密码
 立即注册
查看: 4417|回复: 18

[技术交流] Python:每日一题 122

[复制链接]
发表于 2017-11-8 09:40:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 冬雪雪冬 于 2017-11-10 15:27 编辑

先我们的玩法做了一下改变:
1. 楼主不再提供答案。
2. 请大家先独立思考”,再参考其他鱼油的解答,这样才有助于自己编程水平的提高。
3. 鼓励大家积极答题,奖励的期限为出题后24小时内。
4. 根据答案的质量给予1~3鱼币的奖励。

题目:到年底了,新的一年就要到了,要求打印一个年历,格式如下:
1.jpg

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-11-8 10:32:53 | 显示全部楼层
本帖最后由 xindong 于 2017-11-8 11:28 编辑

有点不好意思了。直接用calendar 模块,好像也没什么需要做的了。

ps. 打印的是英文的,稍后修改一下。

  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on Wed Nov  8 10:27:44 2017
  4. """

  5. import calendar


  6. #返回指定年的日历
  7. def get_calendar(year):
  8.     return calendar.calendar(year)

  9. year = 2018
  10. print(get_calendar(year))
复制代码


打印换成中文的了。另外把一周的开始调整到周日。由于字体问题,有可能对的不是太整齐:

  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on Wed Nov  8 10:27:44 2017
  4. """

  5. import calendar


  6. #返回指定年的日历
  7. def get_calendar(year):
  8.     return calendar.calendar(year)


  9. Month = {'January':'  一月 ','February':'  二月 ', 'March':' 三月',
  10.          'April':' 四月',  'May':'五月','June':'六月',
  11.          'July':'七月','August':'  八月 ',
  12.          'September':'  九月   ','October':' 十月 ',
  13.          'November':'   十一月','December':'  十二月 '}
  14. Week = {'Mo':'一','Tu':'二','We':'三','Th':'四','Fr':'五','Sa':'六','Su':'日'}


  15. year = 2018
  16. calendar.setfirstweekday(6)  
  17. A = (get_calendar(year))
  18. for key in Month:
  19.   A=A.replace(key, Month[key])

  20. for key in Week:
  21.   A=A.replace(key, Week[key])


  22. print(A)

复制代码



评分

参与人数 1鱼币 +3 收起 理由
冬雪雪冬 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-8 10:42:28 | 显示全部楼层
  1. import calendar
  2. calendar.setfirstweekday(6)
  3. print(calendar.calendar(2018))
复制代码


不过出来是英文的,用replace方法可以替换为中文,不过感觉写一长串很傻,就不写了

评分

参与人数 1鱼币 +2 收起 理由
冬雪雪冬 + 2

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-8 10:55:19 | 显示全部楼层
  1. import calendar

  2. number = input()
  3. cal=calendar.calendar(int(number))
  4. print cal
复制代码

TIM截图20171108105443.png

评分

参与人数 1鱼币 +2 收起 理由
冬雪雪冬 + 2

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-8 10:58:06 | 显示全部楼层
  1. import calendar
  2. calendar.prcal(2018)
复制代码

评分

参与人数 1鱼币 +2 收起 理由
冬雪雪冬 + 2

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-8 11:01:13 | 显示全部楼层
本帖最后由 wyp02033 于 2017-11-8 23:19 编辑
  1. weekend = ['日', '一', '二', '三', '四', '五', '六']
  2. days = [x for x in range(1,32)]
  3. months = {1:'一月', 2:'二月', 3:'三月', 4:'四月', 5:'五月', 6:'六月', 7:'七月', 8:'八月', 9:'九月', 10:'十月', 11:'十一月', 12:'十二月'}
  4. month_days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
  5. nmd = month_days.copy()
  6. for i in range(len(month_days)):
  7.     if not i:
  8.         nmd[i] += 1
  9.     else:
  10.         nmd[i] += nmd[i-1] % 7
  11. m = dict.fromkeys([x for x in range(12)], '')
  12. for i in range(12):
  13.     m[i] += (months[i+1]+'\n')
  14.     for each in weekend:
  15.         m[i] += (each + ' ')
  16.     m[i] += '\n'
  17.    
  18.     ndays = days.copy()
  19.     for j in range(nmd[i] - month_days[i]):
  20.         ndays.insert(0, '  ')
  21.     for j in range(nmd[i]):
  22.         if (j + 1) % 7:
  23.             m[i] += (str(ndays[j]).ljust(2) + ' ')
  24.         else:
  25.             m[i] += (str(ndays[j]).ljust(2) + '\n')

  26. print('2018'.center(70))
  27. print()
  28. for each in m:
  29.     m[each] = m[each].split('\n')

  30. for i in range(0, 12, 3):
  31.     max_len = max(len(m[i]), len(m[i+1]), len(m[i+2]))
  32.     for j in range(3):
  33.         while len(m[i+j]) < max_len:
  34.             m[i+j] += [' ' * 20]

  35.     for j in range(max_len):
  36.         if j == 0:
  37.             print(m[i][j].center(17), end=' ' * 6)
  38.             print(m[i + 1][j].center(17), end=' ' * 6)
  39.             print(m[i + 2][j].center(17))
  40.         elif j == 1:
  41.             print(m[i][j].ljust(14), end=' ' * 6)
  42.             print(m[i + 1][j].ljust(14), end=' ' * 6)
  43.             print(m[i + 2][j])
  44.         else:
  45.             print(m[i][j].ljust(20), end=' ' * 6)
  46.             print(m[i+1][j].ljust(20), end=' ' * 6)
  47.             print(m[i+2][j])
复制代码


方法比较笨,但是基本上能满足题目要求。
输出结果:
                        

输出结果。

输出结果。

评分

参与人数 1鱼币 +3 收起 理由
冬雪雪冬 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-11-8 17:09:18 | 显示全部楼层
  1. import calendar
  2. c = calendar.TextCalendar()
  3. c.setfirstweekday(6)
  4. s = c.formatyear(2018)
  5. s = s.replace('Mo','一').replace('Tu','二').replace('We','三').replace('Th','四').replace('Fr','五').replace('Sa','六').replace('Su', '日')
  6. abc = s.split('\n')
  7. s1 = ' '*8 + '一月' + ' '*22 + '二月' + ' '*22 + '三月'
  8. s2 = ' '*8 + '四月' + ' '*22 + '五月' + ' '*22 + '六月'
  9. s3 = ' '*8 + '七月' + ' '*22 + '八月' + ' '*22 + '九月'
  10. s4 = ' '*8 + '十月' + ' '*21 + '十一月' + ' '*20 + '十二月'
  11. for i in range(len(abc)):
  12.     if 'January' in abc[i]:
  13.         print(s1)
  14.     elif 'April'in abc[i]:
  15.         print(s2)
  16.     elif 'July' in abc[i]:
  17.         print(s3)
  18.     elif 'October' in abc[i]:
  19.         print(s4)
  20.     else:
  21.         print(abc[i])
复制代码

评分

参与人数 1鱼币 +3 收起 理由
冬雪雪冬 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-9 18:08:03 | 显示全部楼层
本帖最后由 solomonxian 于 2017-11-9 18:10 编辑

每行打印分成n部分,每部分7个位置,每个位置width个字符长度
7个位置为 "日~六", 空格填充

每个月占9行,分别是:月份、星期,还有28-31个数字+空格
  1. def fun(year=2018, start=1, width=3, between_months="   ", month_per_row=3):
  2.     """输入年份year,该年1月1日是星期几start(0表示星期日),单个日期打印宽度width(应大于2),
  3. 月份之间填充内容between_months,每行打印月数month_per_row(若不能被12整除将不会打印完整内容)"""
  4.    
  5.     week = "".join(i.rjust(width-1) for i in "日一二三四五六") # 中文占3字节,2个空格宽
  6.     months = [(i + '月').center(width*7 - len(i) - 1) for i in
  7.              ('一','二','三','四','五','六','七','八','九','十','十一','十二')]
  8.     days = [str(i).rjust(width) for i in range(1,32)]
  9.     days_per_month = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)

  10.     days_text = [] # 日期,目标文档
  11.     for num in days_per_month:
  12.         days_text.append("".join([" "*width*start, *days[:num], " "*width*(49 - num - start)]))
  13.         start = (num + start)%7

  14.     print(str(year).center(width*7*month_per_row + (month_per_row-1)*len(between_months)), end="\n\n")
  15.     for i in range(12//month_per_row): # 层数
  16.         print(*months[i*month_per_row:(i+1)*month_per_row], sep=between_months)
  17.         print(*[week]*month_per_row, sep=between_months)
  18.         for j in range(7): # 7行
  19.             print(*[days_text[i*month_per_row+k][j*7*width:(j*7+7)*width]
  20.                     for k in range(month_per_row)], sep=between_months)
复制代码

3.png
1.png

评分

参与人数 1鱼币 +3 收起 理由
冬雪雪冬 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-9 20:44:29 | 显示全部楼层
看看答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-9 22:54:57 | 显示全部楼层
  1. import calendar
  2. print(calendar.calendar(2108))
复制代码

评分

参与人数 1鱼币 +2 收起 理由
冬雪雪冬 + 2

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-10 18:13:13 | 显示全部楼层
ooxx7788 发表于 2017-11-8 10:42
不过出来是英文的,用replace方法可以替换为中文,不过感觉写一长串很傻,就不写了
感觉写一长串很傻

感觉中枪了
扎心了,老铁
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-11 08:38:40 | 显示全部楼层
一来就做日历,我还不会,膜拜一下大神们
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-11 08:44:55 | 显示全部楼层
solomonxian 发表于 2017-11-10 18:13
感觉中枪了
扎心了,老铁

你这个是完全自制,很厉害!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-11 18:52:10 | 显示全部楼层
ooxx7788 发表于 2017-11-11 08:44
你这个是完全自制,很厉害!

混蛋!就算你这么说,我也不会高兴的~~~
请教你一个问题,
你是怎么接触到这些库的呢?

光是标准库貌似就一大堆,总不能每个轮子都试一遍吧
论坛里好像也没看到这方面的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-11 20:01:19 | 显示全部楼层
solomonxian 发表于 2017-11-11 18:52
混蛋!就算你这么说,我也不会高兴的~~~
请教你一个问题,
你是怎么接触到这些库的 ...

想要做什么功能之前,先百度,google.git走一圈,看看前人做过什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-11 20:08:29 | 显示全部楼层
  1. import calendar
  2. correct = 0
  3. while correct == 0:
  4.     try:
  5.         year = int(input("请您输入年份:"))
  6.         if type(year) == int:
  7.             correct = correct +1
  8.             cal=calendar.calendar(int(year))
  9.             Month = {'January':'  一月 ','February':'  二月 ', 'March':' 三月',
  10.                      'April':' 四月',  'May':'五月','June':'六月',
  11.                      'July':'七月','August':'  八月 ',
  12.                      'September':'  九月   ','October':' 十月 ',
  13.                      'November':'   十一月','December':'  十二月 '}
  14.             Week = {'Mo':'一','Tu':'二','We':'三','Th':'四','Fr':'五','Sa':'六','Su':'日'}
  15.             for key in Month:
  16.               cal=cal.replace(key, Month[key])

  17.             for key in Week:
  18.               cal=cal.replace(key, Week[key])
  19.             print(cal)
  20.         else:
  21.             print("请您输入整数!")
  22.     except:
  23.         print("对不起您输入错误!请您重新输入!")
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-13 09:47:34 | 显示全部楼层
虽然还不会做,但是也要留言
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-13 12:27:19 | 显示全部楼层
学习了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-30 11:38:31 | 显示全部楼层
import calendar

months_Chinese=['  一月','   二月','   三月','四月','五月','六月',
               '七月',' 八月','    九月','  十月','  十一月','  十二月']
months_English=['January','February','March','April','May','June',
                'July','August','September','October','November','December']

weeks_Chinese=['一','二','三','四','五','六','日']
weeks_English=['Mo','Tu','We','Th','Fr','Sa','Su']

calendar.setfirstweekday(6)
DATA=calendar.calendar(2018)

for i in range(12):
    DATA=DATA.replace(months_English[i],months_Chinese[i])

for j in range(7):
    DATA=DATA.replace(weeks_English[j],weeks_Chinese[j])

print(DATA)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 05:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表