#!/usr/bin/env python
#coding=utf-8
import re
from datetime import datetime as dt, timedelta
import platform
if platform.python_version()[:1] == '2': #判断python版本是2还是3
import sys
reload(sys)
sys.setdefaultencoding('utf8')
class Idcard(object):
'''
m = Idcard('225122198611134730')
print(m.sex)
男
m.birth
'1986-11-13'
m.age
30
'''
def __init__(self,idcard):
self.idcard = idcard
if len(idcard) == 15:
sex, birth = idcard[-1:], '19' + idcard[6:12]
elif len(idcard) == 18:
sex, birth = idcard[-2:-1], idcard[6:14]
else:
raise Exception('len(idcard) is {} (15/18)'.format(len(idcard)))
self._sex = int(sex) % 2
self._birth = birth
@property
def sex(self):
return u'男' if self._sex % 2 else u'女'
@property
def age(self):
now, bir = dt.now(), dt.strptime(self._birth, '%Y%m%d')
beforebirth = (now - dt(now.year, bir.month, bir.day)).days 0
return dt.now().year - int(self._birth[:4]) - beforebirth
@property
def birth(self):
return dt.strptime(self._birth, '%Y%m%d').strftime('%Y-%m-%d')
def alignment(str1, space, align = 'left'):
length = len(str1.encode('gb2312'))
space = space - length if space =length else 0
if align == 'left':
str1 = str1 + ' ' * space
elif align == 'right':
str1 = ' '* space +str1
elif align == 'center':
str1 = ' ' * (space //2) +str1 + ' '* (space - space // 2)
return str1
def main():
fname = 'customer.txt'
'''
with open(fname, 'w') as f:
f.write("""
郑文杰 225122198611134730
文萍 225122198912094740
郑妈妈 225122590303476
郑爸爸 225122560506471
""")
'''
newf = 'ourcustomers.txt'
with open(fname) as f:
s = f.readlines()
L, newL = [re.split(r'\s+', i.strip()) for i in s], []
for i in L:
if len(i) == 2:
g = Idcard(i[1])
newL.append('{}{}{}'.format(
alignment(i[0], 10), alignment(g.sex, 8), g.age))
with open(newf, 'w') as f:
f.write('\n'.join(newL))
print('\n'.join(newL[:100]))
print('Customer data has been write into {}'.format(newf))
if __name__ == '__main__':
import doctest
doctest.testmod()
main()
第一题,用input()接受用户输入,int()把输入转换成整型,if... else语句判断条件。能被2整除的是偶数,否则奇数
代码:
n = int(input())
if n % 2 == 0:
..#前面的点表示缩进。
..print("是偶数")
else:
..print("是奇数")
第二题input()、int()和嵌套if语句
代码:
n = int(input())
if n % 100 != 0:
..if n % 4 == 0:
....print("是闰年")
..else:
....print("是平年")
elif n % 400 == 0:
..print("是闰年")
else:
..print("是平年")
第三题还是一样滴,用input(),int()和if...else语句
代码:
a = int(input())
b = int(input())
if a b:
..print(a – b)
else:
..print(b – a)
第四题也是一样滴
代码:
m = int(input())
n = int(input())
if m n:
..print(m, n)
else:
..print(n, m)
第五题 (*^▽^*)
代码:
a = int(input())
if a =60:
..print("合格")
else:
..print("不合格")
1.将列表的元素按逆序重新存放。
my_list = [1, 2, 3, 4, 5]
my_list.reverse() # 将列表元素反转
print(my_list) # 输出反转后的列表
2.将列表中的偶数变成其平方值,奇数保持不变。
my_list = [1, 2, 3, 4, 5]
for i in range(len(my_list)):
if my_list[i] % 2 == 0: # 如果元素是偶数
my_list[i] = my_list[i] ** 2 # 将元素平方
print(my_list) # 输出更改后的列表
3.生成包含100个100以内的随机正整数的元组,统计每个数出现的次数。
生成包含100个100以内的随机正整数的元组,统计每个数出现的次数。
4.输入5X5的矩阵a,完成下列要求:a.输出矩阵ab.将第2行和第5行元素对调后,再重新输出a
# a.
a = [[1, 2, 3, 4, 5],
[6, 7, 8, 9, 10],
[11, 12, 13, 14, 15],
[16, 17, 18, 19, 20],
[21, 22, 23, 24, 25]]
for row in a:
print(row) # 每行输出矩阵
# b.
a[1], a[4] = a[4], a[1] # 将第2行和第5行元素对调
# c.
for row in a:
print(row) # 重新输出矩阵
5.创建由星期一到星期日的7个值组成的字典,输出键列表、值列表和键值列表。
days_of_week = {
"Monday": 1,
"Tuesday": 2,
"Wednesday": 3,
"Thursday": 4,
"Friday": 5,
"Saturday": 6,
"Sunday": 7
}
keys = list(days_of_week.keys()) # 将字典键转换为列表
values = list(days_of_week.values()) # 将字典值转换为列表
key_values = list(days_of_week.items()) # 将字典键值对转换为列表
print("Keys:", keys) # 输出键列表
print("Values:", values) # 输出值列表
print("Key-Values:", key_values) # 输出键值列表
6.输入10名学生的姓名和成绩,输出其最高分和最低分。要求使用字典存放学生的姓名和成绩。
my_dict = {}
for i in range(10):
name = input("Enter student name: ") # 输入学生姓名
score = int(input("Enter student score: ")) # 输入学生成绩
my_dict[name] = score # 将学生姓名和成绩存入字典
highest_score = max(my_dict.values()) # 获取最高成绩
lowest_score = min(my_dict.values()) # 获取最低成绩
print("Highest score: ", highest_score) # 输出最高成绩
print("Lowest score: ", lowest_score) # 输出最低成绩
7.随机产生10个[0,10]范围的整数,分别组成集合A和集合B。输出集合A、集合B的内容、长度以及他们的并集、交集和差集。
import random
A = set(random.sample(range(11), 10)) # 随机从0到10范围内选取10个不重复的整数,将其作为集合A的元素
B = set(random.sample(range(11), 10)) # 随机从0到10范围内选取10个不重复的整数,将其作为集合B的元素
print("Set A: ", A) # 输出集合A
print("Set B: ", B) # 输出集合B
print("Length of A: ", len(A)) # 输出集合A的长度
print("Length of B: ", len(B)) # 输出集合B的长度
print("Union of A and B: ", A.union(B)) # 输出集合A和集合B的并集
print("Intersection of A and B: ", A.intersection(B)) # 输出集合A和集合B的交集
print("Difference of A and B: ", A.difference(B)) # 输出集合A和集合B的差集
该答案为组合数学中著名的卡特兰数,其通式为C(2n,n)-C(2n,n-1)
这里采用递推关系求解,即动态规划的方法
设n对父子有d[n]种出场策略,注意初值d[0]=1
因为每个孩子前面必有一个父亲与之对应
对于i对父子,遍历第j个孩子,该孩子前面有j-1个孩子,对应d[j-1]种出场策略
后面有i-j个孩子,对应d[i-j]种出场策略,则d[i]+=d[j-1]*d[i-j],最终d[n]即为所求
python代码如下:
n = int(input())
d = [0] * (n+1)
d[0] = 1
for i in range(n+1):
for j in range(i+1):
d[i] += d[j-1] * d[i-j]
print(d[n])
运行结果如下:
望采纳~