python练习题随手记

python练习题随手记

1.啤酒与尿布

下面每一行是一个购物小票,直到遇到五个零00000,输入序列终止,每个字母表示一种商品(字母区分大小写,即a
和A代表不同的产品),请分析哪两个种产品的销售相关性最高: 样例输入: AABZXY BMNY CD CBYPQ BWVCY 00000
输出(字幕顺序按ASC码升序排列): BY

# coding=utf-8
pairs = []
while True:
    check = input()
    if check != "00000":
        # 去除重复字符
        s1 = set(check)
        s2 = "".join(s1)
        # 按ASCII排序
        lis = list(s2)
        lis.sort()
        s3 = "".join(lis)
        # 两两组合
        for i in range(len(s3)):
            for j in range(i + 1, len(s3)):
                pair = s3[i] + s3[j]
                pairs.append(pair)
    else:
        break

res = max(pairs, key=pairs.count)
print(res)

2.身份证号校验

我国身份证号码有18位,排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位校验码。 其中:

1.地址码 表示编码对象常住户口所在县(市、旗、区)的行政区域划分代码,按GB/T2260的规定执行。
2.出生日期码 表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日代码之间不用分隔符。
3.顺序码 表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。
4.校验码
其值可以是数字或字母X。校验方法如下: (1)将身份证号码前17位数分别乘以不同的系数:7 9 10 5 8 4 2 1 6 3 7 9
10 5 8 4 2 (2)将上述17个相乘的结果求和,然后除以11,获得余数 (3)余数0 1 2 3 4 5 6 7 8 9
10分别对应身份证号码的最后一位为1 0 X 9 8 7 6 5 4 3 2

例如:某身份证号码是210102198004256032,校验其正确性的过程如下:
首先:计算27+19+010+15+…+3*2,前17位的乘积和是230 然后:用230除以11余数为10
最后:余数10对应的校验位数字是2,因此,这是一个合格的身份证号码。
请编写一个程序,对用户输入的身份证号码进行校验,合格则输出Yes,并输出出生日期和性别。不合格则输出No。
输入样例1: 210102198004256032
输出样例1: Yes
出生日期:1980年04月25日
性别:男
输入样例2:
21010219800425609X
输出样例2: No

# coding=utf-8
id = input()

W = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
check = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']

sum = 0  # 前17位累加和
for i in range(0, 17):
    sum += int(id[i]) * W[i]

if id[17] != check[sum % 11]:
    print("No")
else:
    print("Yes")
    year = id[6:10]
    month = id[10:12]
    day = id[12:14]

    print("出生日期:" + year + '年' + month + '月' + day + '日')
    if int(id[16]) % 2 == 1:
        print("性别:男")
    else:
        print("性别:女")

3.汉诺塔

描述
古代有一座汉诺塔,塔内有3个座A、B、C,A座上有n个盘子,盘子大小不等,大的在下,小的在上,如图所示。有一个和尚想把这n个盘子从A座移到C座,但每次只能移动一个盘子,并且自移动过程中,3个座上的盘子始终保持大盘在下,小盘在上。在移动过程中可以利用B座来放盘子。要求输出移动的步骤。
输入格式 输入一个正整数,表示汉诺塔内的盘子个数n(1<=n<=64)。 输出格式
输出移动的步骤,每行一步,如从A座移动到C座,输出“A–>C”。 输入样例: 3 输出样例: A–>C A–>B C–>B
A–>C B–>A B–>C A–>C

def move(n, source, buffer, dest):
    if n == 1:
        print(source + '-->' + dest, end=' ')
    else:
        move(n - 1, source, dest, buffer)
        move(1, source, buffer, dest)
        move(n - 1, buffer, source, dest)

n = int(input())
move(n, 'A', 'B', 'C')

4.青蛙跳台阶

一只青蛙一次可以跳上1级台阶,也可以跳上2级。请问该青蛙跳上一个n级的台阶总共有多少种跳法。 输入台阶数,输出一共有多少种跳法
输入样例:3
输出样例:3

def jump(n):
    if n < 1:
        return 0
    if n == 1:
        return 1
    if n == 2:
        return 2
    return jump(n - 1) + jump(n - 2)


n = int(input())
print(jump(n))

5.猴子吃桃

小猴子有一天摘了很多桃子,一口气吃掉一半还不过瘾,就多吃了一个;第二天又吃掉剩下的桃子的一半多一个,以后每天都是吃掉前一天剩余桃子的一半还多一个,到了第五天再想吃的时候发现只剩下一个了。问小猴子最初摘了多少个桃子

x2 = 1
for day in range(4, 0, -1):
    x1 = (x2 + 1) * 2
    x2 = x1
print(x1)

6.竖向排版

中国的古人写文章或诗词,是从右向左竖向排版的。请编写程序,把一段文字按古风排版。 输入格式:
输入在第一行给出一个正整数N(<100),是每一列的字符数。第二行给出一个长度不超过1000的非空字符串,以回车结束。
输出格式: 按古风格式排版给定的字符串,每列N个字符(最后一列可能不足N个,用空格补齐)。

# coding=utf-8

# 输入
N = int(input())
string = input()

# 先补空格
length = len(string)
if length % N > 0:
    i = length % N
    string = string.ljust(i)

# 找规律 逐行输出
for i in range(N):
    row = string[i::N]
    row = row[::-1]
    print(row)

7.IP检验

描述

互联网上的每台计算机都有一个独一无二的编号,称为IP地址,每个合法的IP地址由 ‘.’
分隔开的4个数字组成,每个数字的取值范围是0-255。
现在用户输入一个字符串(不含空白符,不含前导0,如001直接输入1),请你判断s是否为合法IP,若是,输出’Yes’,否则输出’No’。
如用户输入为202.114.88.10, 则输出Yes; 当用户输入202.114.88,则输出No。

输入格式:一个字符串
输出格式:输出’Yes’或’No’

输入样例1: 255.255.255.0
输出样例1: Yes
输入样例2:202.114.88
输出样例2: No
输入样例3:202.114.88.10
输出样例3:Yes

# coding=utf-8
def check_ip(ipAddress=""):
    ip_list = ipAddress.strip().split('.')
    if len(ip_list) != 4:
        print("No")
        return False  # 不是4段
    for item in ip_list:
        try:
            item = int(item)
            if not 0 <= item <= 255:
                print("No")
                return False  # 不是[0,255]
        except:
            print("No")
            return False  # 不是数字
    print("Yes")
    return True

check_ip(input())

8.计算切蛋糕

一块蛋糕,切一刀可以分成两块;切2刀最多可分成4块。计算切n刀,最多能切出多少块蛋糕?

比如:

输入:3

输出:7

输入:4

输出:11

def count(n):
    if n == 1:
        return 2
    else:
        return count(n - 1) + n


n = int(input())
print(count(n))
  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值