python分几个阶段呢_python第一阶段习题

按照下面的格式打印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()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值