001-定义电子日历类
一 题目描述
链接:https://www.nowcoder.com/questionTerminal/e4c67097cdb242d9a3f38b7cfe839396?answerType=1&f=discussion
来源:牛客网
KiKi学习了面向对象技术,学会了通过封装属性(变量)和行为(函数)定义类,现在他要设计一个电子日历类TDate。
它有3个私有数据成员:Month,Day,Year和若干个公有成员函数,要求:
(1)带有默认形参值的构造函数,默认值为0, 0, 0;(2)输出日期函数,用“日/月/年”格式输出日期;
(3)设置日期函数,从键盘输入年、月、日。
输入描述:一行,三个整数,用空格分隔,分别表示年、月、日。
输出描述:一行,用“日/月/年”格式输出日期。
示例1:输入:2019 12 30
输出:30/12/2019
二 代码详解
方法一:
1 import sys 2 y , m ,d = map(int,sys.stdin.readline().split()) 3 print('%d/%d/%d'%(d,m,y))
思路:用户输入数据之后,先通过split()函数将用户输入的数据通过空格分割成包含年、月、日的列表,再通过map函数将列表内的字符串类型的元素转换成整形,然后分别赋值(或者说贴标签更合适)。
(我没想到还能用:y,m,d这种方式进行赋值,写的时候一个一个输入的。。。。还有脑袋里也没有通过分片的方式得到各自的值这种思路,所以没做出来,我好菜。。)
1 python的标准输入
(1)input、raw_input()——交互式输入
- Python 3.x 中 input() 函数可以实现提示输入,python 2.x 中要使用 raw_input()
- 举例:
-
1 >>> import sys 2 >>> line = input() 3 1 2 3 4 5 4 >>> line 5 '1 2 3 4 5'
(2)sys.stdin https://www.cnblogs.com/itwhite/p/12327548.html
- 功能:使用 sys.stdin 可以获取标准输入的文件句柄对象
- 应用:
- sys.stdin.readline() :读取一行,包括换行符
- sys.stdin.read(n) :用来指定用户输入字符的长度,即表示读取n个字节
- sys.stdin.read():读取到文件尾
- 示例:
-
1 >>> line = sys.stdin.readline() 2 1 2 3 4 5 3 >>> line 4 '1 2 3 4 5\n' 5 6 >>> line = sys.stdin.read(3) 7 1 2 3 4 5 8 >>> line 9 '1 2'
(3)sys.stdin.readline()
- 功能:用来获取一行标准输入,包括行末的换行符,input()不包括换行符
- 特点:其默认输入的格式是字符串,如果是int,float类型则需要强制转换
- 变形:
- sys.stdin.readline().strip('\n'):strip('\n')表示删除尾随的换行符\n,否则输出是“字符串+\n”的形式
- sys.stdin.readline().strip():strip()表示删除任何前导或尾随的空格字符
- sys.stdin.readline().split():若是多输入,split()默认是以空格分隔,返回一个包含多个字符串的列表
- 举例:
-
1 >>> import sys 2 >>> line = sys.stdin.readline().strip('\n') 3 1 2 3 4 5 4 >>> line 5 '1 2 3 4 5' 6 7 >>> line = sys.stdin.readline().strip() 8 1 2 3 4 5 9 >>> line 10 '1 2 3 4 5' 11 12 >>> line = sys.stdin.readline().split() 13 1 2 3 4 5 14 >>> line 15 ['1', '2', '3', '4', '5'] 16 >>>
(4)map()函数https://www.cnblogs.com/luoxun/p/13294912.html
- 功能:map() 会根据提供的函数对指定序列做映射。第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
- 应用:此处用来进行强制类型转换
- 举例:
-
1 >>> line = sys.stdin.readline().split() 2 1 2 3 4 5 3 >>> line 4 ['1', '2', '3', '4', '5'] 5 >>> a,b,c,d,e = map(int,line) 6 >>> a 7 1 8 >>> type(a) 9 <class 'int'> 10 >>>
2 代码变形
1 >>> import sys 2 >>> y,m,d = map(int,sys.stdin.readline().split()) 3 2020 7 18 4 >>> print('%d/%d/%d' % (d,m,y)) 5 18/7/2020 6 7 >>> import sys 8 >>> y,m,d = map(int,input().split()) 9 2020 7 18 10 >>> print(f'{d}/{m}/{y}') 11 18/7/2020 12 >>>
说明input和sys.stdin.readline()相当于两种不同的输入方式,它们的区别在于input输入方式可以输出提示信息(交互式输入)并且不会读入换行符;而sys.stdin.readline()不能输出提示信息,但会读入换行符。
方法二:
1 class TDate(): 2 3 def __init__(self,month=0,day=0,year=0): 4 self.month = month 5 self.day = day 6 self.year = year 7 8 def getDate(self): 9 print("{0}/{1}/{2}".format(self.day,self.month,self.year)) 10 11 y,m,d = map(int,input().split()) 12 date = TDate(m,d,y) 13 date.getDate()
类的内容我暂时还没学到,等学到之后再解释。。。