python第一阶段习题

  1. 按照下面的格式打印1~10的数字以及每个数的平方、几何级数和阶乘。(5分)

    数字平方几何级数阶乘
    1121
    2442
    3986
    4161624
    52532120
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()
    原文作者:rottengeek
    原文地址: https://segmentfault.com/a/1190000014691016
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞