|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- # 题目:特别的生日
- # 我们知道任何一个日期都可以用8个数字写成“yyyymmdd”这种形式,例如“20010101”表示2001年1月1日,小明发觉自己的生日非常特别,
- # 因为当自己的生日写成“yyyymmdd”的形式后,发觉这8个数字各不相同,而且从自己的生日以后,一直到今天就再也没有出现这样的日期了。请问小明的生日是哪年的哪天?请用程序解答。
- def check(day):
- num = []
- for i in range(4):
- num.append(day[0] % 10)
- day[0] //= 10
- for i in range(2):
- num.append(day[1] % 10)
- day[1] //= 10
- for i in range(2):
- num.append(day[2] % 10)
- day[2] //= 10
- num.sort()
- if num[0] != num[1] != num[2] != num[3] != num[4] != num[5] != num[6] != num[7]:
- return True
- else:
- return False
- def yestoday(today):
- if today[2] != 1:
- today[2] -= 1
- elif (today[1] in [2, 4, 6, 8, 9, 11]) == True:
- today[2] = 31
- today[1] -= 1
- elif (today[1] in [5, 7, 10, 12]) == True:
- today[2] = 30
- today[1] -= 1
- elif today[1] == 1:
- today[2] = 31
- today[1] = 12
- today[0] -= 1
- else:
- if (((today[0] % 400) ==0) or (((today[0] % 100) != 0) and ((today[0] % 4) == 0))) == True:
- today[2] = 29
- else:
- today[2] = 28
- today[1] = 2
- return today
- day = [2017, 12, 7]
- birthday = day[:]
- while True:
- result = check(birthday)
- if result == True:
- break
- else:
- day = yestoday(day)
- birthday = day[:]
- print('小明的生日是%d年%d月%d日' % (day[0], day[1], day[2]))
复制代码
在这个题目中,我调用自定义的check函数判断该日期是否符合要求,如果函数的输入值为变量day,但是函数运行结束后,为什么day这个变量就变成了[0, 0, 0]?为了解决这个问题我多加了一个变量birthday,保存day的数据。。。
这不是全局变量与局部变量的问题,你没有搞清楚python中函数参数传递的方式。
首先在python中,一切变量都是对某个“对象”的“引用”,你在赋值、传递参数时,只不过是给一个“对象”建立了一个新的“引用”
当这个对象是数字常量、字符串、元组这类不可变对象的时候,你重新赋值就是创建了新的对象的引用
而当对象是列表、字典这类可变对象的时候,你做出的任何修改性赋值都是在原对象上进行修改,如果有多个变量是这个对象的“引用”,你就会发现这些变量都被“改变了”,因为事实上你只是改变了它们所引用的对象
具体可以去搜一搜比如python函数参数引用传递,浅拷贝与深拷贝等内容
|
|