按照下面的格式打印1~10的数字以及每个数的平方、几何级数和阶乘。(5分)
数字 平方 几何级数 阶乘 1 1 2 1 2 4 4 2 3 9 8 6 4 16 16 24 5 25 32 120
print('|{0:<18}|{1:<18}|{2:<18}|{3:<18}|'.format('数字', '平方', '几何级数', '阶乘'))
print('|{0:<20}|{1:<20}|{2:<20}|{3:<20}|'.format('----', '----', '----', '----'))
number4 = 1
for i in range(1, 13):
number = i
number2 = i ** 2
number3 = 2 ** i
number4 *= i
print('|{0:<20}|{1:<20}|{2:<20}|{3:<20}|'.format(number, number2, number3, number4))
from math import factorial
def main():
print('%-12s%-12s%-12s%-12s' % ('s', 's', 's', 's'))
for num in range(1, 11):
print('%12d%12d%12d%12d' % (num, num ** 2, 2 ** num, factorial(num)))
# %d前加数字表示间隔的字符数
if __name__ == '__main__':
main()
2.设计一个函数,
生成指定长度的验证码(由数字和大小写英文字母构成的随机字符串)。(5分)
import random
import string
def id_code():
long = int(input('请输入验证码的长度'))
str1 = ''
for i in range(long):
str1 += random.choice(string.ascii_letters + string.digits)
print(str1)
id_code()
3.设计一个函数,统计字符串中 英文字母和数字各自出现的次数。(10分)
num1 = 0
num2 = 0
str1 = '@djjkjk9565628jjjlkaskdl--'
import string
for i in str1:
if i in string.digits:
num1 += 1
if i in string.ascii_letters:
num2 += 1
print(num1,num2)
4.设计一个函数,判断传入的整数列表
(要求元素个数大于2个)中的元素能否构成等差数列。(10分)
def judge():
list1.sort()
for i in range(len(list1)-2):
if (list1[i+1]-list1[i]) != (list1[i+2]-list1[i+1]):
return False
return True
list1 = [1,2,3,5]
print(judge())
5.设计一个函数,计算字符串中所有数字序列的和。(10分)
import re
str1 = 'asb123dasjk-7f078'
list1 = re.findall(r'-\d+|\d+',str1)
s = 0
for i in list1:
s += int(i)
print(s)
6.设计一个函数,对传入的字符串(假设字符串中只包含小写字母和空格)进行加密操作,
加密的规则是a变d,b变e,c变f,……,x变a,y变b,z变c,空格不变,返回加密后的字符串。(10分)
def change(str1):
str2 = ''
for i in str1:
if i != ' ': # a 97 z 122
str2 += chr(ord('a') + (ord(i) -ord('a') + 3) % 26 )
else:
str2 += ' '
return str2
print(change('abcd xyz'))
7.设计“跳一跳”游戏的计分函数,“跳一跳”游戏中黑色小人从一个方块跳到另一个方块上会获得1分,
如果跳到方块的中心点上会获得2分,连续跳到中心点会依次获得2分、4分、6分、……。
该函数传入一个列表,列表中用布尔值True或False表示是否跳到方块的中心点,函数返回最后获得的分数。(10分)
方法一
str1 =''
list1 = [True, True, True, False, False, False, True]
num1 = list1.count(False)
num2 = 0
for i in list1:
str1 += str(i)
list2 = str1.split('False')
for i in list2:
num2 +=i.count('True')*(i.count('True')+1)
print(num2+num1)
list1 = [True, True, True, False, False, False, True]
score = 0
rate = 2
for i in list1:
if i:
score += rate
rate += 2
else:
score += 1
rate = 2
print(score)
8.设计一个函数,统计一个字符串中出现频率最高的字符及其出现次数(20分)。
def count(str):
dict={}
for i in str:
if i in dict:
dict[i]+=1
else:
dict[i]=1
max_keys = []
max_value = 0
for key, value in dict.items():
if value > max_value:
max_value = value
max_keys.clear()
max_keys.append(key)
elif value == max_value:
max_keys.append(key)
return max_keys, max_value
print(count('aabbaaccbb')) # (['a', 'b'], 4)
9.设计一个函数,传入两个代表日期的字符串,
如“2018-2-26”、“2017-12-12”,计算两个日期相差多少天。(20分)。
def month_to_day(m):
s = 0
for i in range(1, m):
if i == 2:
s = s+29 if (i % 4 == 0 and i % 100 != 0) or (i % 400 == 0) else s+28
else:
s = s+30 if i == 4 or i == 6 or i == 9 or i == 11 else s+31
return s
def date_to_day(date1, date2):
list1 = date1.split('-')
list2 = date2.split('-')
y1,m1,d1,y2,m2,d2 = int(list1[0]),int(list1[1]),int(list1[2]),int(list2[0]),\
int(list2[1]),int(list2[2])
sum = 0
if y1 > y2:
y1, y2 = y2, y1
m1, m2 = m2, m1
d1, d2 = d2, d1
if y1 == y2 and m1 > m2:
m1, m2 = m2, m1
d1, d2 = d2, d1
if y1 == y2 and m1 == m2 and d1 > d2:
d1, d2 = d2, d1
print(y1,m1,d1,y2,m2,d2)
for i in range(y1, y2):
sum = sum + 366 if (i % 4 == 0 and i % 100 != 0) or (i % 400 == 0) else sum + 365
s1 = month_to_day(m1)
s2 = month_to_day(m2)
print('sum=%d,s2=%d,s1=%d,d2=%d,d1=%d'%(sum,s2,s1,d2,d1))
sum = sum+s2-s1 + d2 - d1
return sum
date1 = '2018-1-1'
date2 = '2017-12-31'
print(date_to_day(date1,date2))
import datetime
d1 = datetime.datetime(2018,1,1,0,0,0,0)
print(d1)
d2 = datetime.datetime(2017,12,31,0,0,0,0)
d3 = d1-d2
print(d3.days)
10.“四川麻将”共有108张牌,分为“筒”、“条”、“万”三种类型,
每种类型的牌有1~9的点数,每个点数有4张牌;游戏通常有4个玩家,游戏开始的时候,
有一个玩家会拿到14张牌(首家),其他三个玩家每人13张牌。
要求用面向对象的方式创建麻将牌和玩家并实现洗牌、摸牌、玩家按照 类型 和 点数 排列手上的牌的操作,
最后显示出游戏开始的时候每个玩家手上的牌。(20分)
”’
import random
class Man(object):
def __init__(self, name):
self.name = name
self.maj = []
class Tongzi(object):
name = '筒'
def __init__(self, number):
self.number = number
class Tiaozi(Tongzi):
name = '条'
class Wanzi(Tongzi):
name = '万'
def packin(clas):
list = []
for i in range(1, 10):
for j in range(4):
a = clas(i)
list.append(a)
return list
def main():
tongList = packin(Tongzi)
tiaoList = packin(Tiaozi)
wanList = packin(Wanzi)
List = tiaoList + tongList + wanList
m1 = Man('王宝强')
m2 = Man('贾乃亮')
m3 = Man('马伊琍')
m4 = Man('陈羽凡')
# 洗牌
random.shuffle(List)
# 发牌
for i in range(13):
m1.maj.append(List.pop())
m2.maj.append(List.pop())
m3.maj.append(List.pop())
m4.maj.append(List.pop())
# 第一个人多发一张牌
m1.maj.append(List.pop())
for m in [m1, m2, m3, m4]:
print('\n%s的牌是:' % m.name)
dict1 = {'筒': [], '条': [], '万': []}
for j in range(14 if m == m1 else 13):
if m.maj[j].name == '筒':
dict1['筒'].append(m.maj[j].number)
elif m.maj[j].name == '条':
dict1['条'].append(m.maj[j].number)
elif m.maj[j].name == '万':
dict1['万'].append(m.maj[j].number)
dict1['筒'].sort()
dict1['条'].sort()
dict1['万'].sort()
for key, value in dict1.items():
for i in value:
print(str(i) + key, end=' ')
if __name__ == '__main__':
main()