针对于这种问题一般先寻找逻辑,七月都是三十一天,就将周一到周日循环排列三十一次,每次排列结束后判断三十一个数中是否是四个周五,四个周二,否则退出,废话不多说直接上代码
# 七月有两个周五,两个周二,七月一周几?
# 七月一共三十一天
day = ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] # 准备好循环的内容
while True:
# 周一到周日排列循环31天
data_day = [] # 循环错误一次后将列表清空,重新计算
while True:
for i2 in range(7):
data_day.append(day[i2-1]) # 循环七次将周一至周日添加到data_day列表中
if len(data_day) == 31: # 如果data_day列表满足31位数就跳出,防止最后一次添加周数时添加过多
break # 跳出for循环
if len(data_day) == 31: # 判断data_day长度是否满足31位数,是则跳出
break
# 循环好一个月31天开始判断各周几出现的次数——使用字典
dict_data = {} # 建立一个字典,用来判断各周数出现的次数
for key in data_day:
dict_data[key] = dict_data.get(key, 0) + 1
if dict_data['周二'] == 4 and dict_data['周五'] == 4: # 如果周二出现4次,周五出现4此就跳出循环
break
else: # 循环不对将周数列表的最后一位数插到第一位,最后一位删除,重新排列计算
day.insert(0, day[-1])
del day[-1]
# 循环好一个月31天开始判断各周几出现的次数——使用列表.count方法
# if data_day.count('周二') == 4 and data_day.count('周五') == 4:
# break
# else:
# day.insert(0, day[-1]) # 将要循环的周一至周日顺序切换,最后一个数追加到第一位
# del day[-1] # 再将最后一位数删除,完成重新排序
print('b月份长度:', len(data_day)) # 输出判断正确的循环好的31位列表
print('每周出现次数:', dict_data)
print('data_day列表:', data_day)
print('七月一是', data_day[0], sep='')
输出结果是:
b月份长度: 31
每周出现次数: {'周六': 5, '周日': 5, '周一': 5, '周二': 4, '周三': 4, '周四': 4, '周五': 4}
data_day列表: ['周六', '周日', '周一', '周二', '周三', '周四', '周五', '周六', '周日', '周一', '周二', '周三', '周四', '周五', '周六', '周日', '周一', '周二', '周三', '周四', '周五', '周六', '周日', '周一', '周二', '周三', '周四', '周五', '周六', '周日', '周一']
七月一是周六