美文网首页新手练习100题
Python挑战100题(14~20)

Python挑战100题(14~20)

作者: YoYoYoo | 来源:发表于2019-08-01 20:25 被阅读0次

14、信息加密

题目:给你个小写英文字符串a和一个非负数b(0<=b<26), 将a中的每个小写字符替换成字母表中比它大b的字母。这里将字母表的z和a相连,如果超过了z就回到了a。
例如a="cagy", b=3,
则输出 :fdjb
提示: ord('a') = 97, ord('b') = 98, chr(97) = a
参考答案:

a = 'cagy'
b = 3
c = ''
for i in a:
    if ord(i)+b <=122:
        c = c + chr(ord(i)+b)
    else:
        c = c + chr(ord(i)+b-26)
print(c)

15、回文子串

题目:给你一个字符串a和一个正整数n,判断a中是否存在长度为n的回文子串。如果存在,则输出YES,否则输出NO。
回文串的定义:记串str逆序之后的字符串是str1,若str=str1,则称str是回文串,如"abcba".
参考答案:

a = 'dfkdghabcba'
n = 5
result = 'NO'
for i in range(len(a)):
    if i+n <= len(a):
        str = a[i:i+n:1]
        str1 = str[::-1]
        if str == str1:
            result = 'YES'
            break
print(result)

16、时间就是金钱

题目:给你两个时间st和et(00:00:00<=st <= et<=23:59:59), 请你给出这两个时间间隔的秒数。
如:st="00:00:00", et="00:00:10", 则输出10.
参考答案:
方法一:切片

st="00:01:00"
et="00:02:10"
list_st = st.split(':')
list_et = et.split(':')
for i in range(0,len(list_st)):
    list_st[i] = int(list_st[i])
    list_et[i] = int(list_et[i])

st_second = list_st[0]*3600 + list_st[1]*60 +list_st[2]
et_second = list_et[0]*3600 + list_et[1]*60 +list_et[2]
print(et_second - st_second)

方法二:time模块

import datetime

st="00:01:00"
et="00:02:10"
print((datetime.datetime.strptime(et,"%H:%M:%S")-datetime.datetime.strptime(st,"%H:%M:%S")).seconds)

17、格式化时间

题目:给你一个时间t(t是一个字典,共有六个字符串key(year,month,day,hour,minute,second),值为每个值为数字组成的字符串,
如t={'year':'2013','month':'9','day':'30','hour':'16','minute':'45','second':'2'}
请将其按照以下格式输出, 格式:XXXX-XX-XX XX:XX:XX。如上例应该输出: 2013-09-30 16:45:02。
参考答案:
方法一:利用datetime模块

import datetime

t = {'year':'2013','month':'9','day':'30','hour':'16','minute':'45','second':'2'}
ss = '{year}-{month}-{day} {hour}:{minute}:{second}'.format(**t)

print(datetime.datetime.strptime(ss,'%Y-%m-%d %H:%M:%S'))

方法二:一行

t = {'year':'2013','month':'9','day':'30','hour':'16','minute':'45','second':'2'}
print('%d-%02d-%02d %02d:%02d:%02d' % (int(t['year']),int(t['month']),int(t['day']),int(t['hour']),int(t['minute']),int(t['second'])))

18、序列判断

题目:给你一个整数组成的列表L,按照下列条件输出:
若L是升序排列的,则输出"UP";
若L是降序排列的,则输出"DOWN";
若L无序,则输出"WRONG"。
参考答案:

L = [1,2,3,4,2]
print('UP' if sorted(L)==L else 'DOWN' if sorted(L,reverse=True)==L else 'WRONG')

19、加油站

题目:一个环形的公路上有n个加油站,编号为0,1,2,...n-1,
每个加油站加油都有一个上限,保存在列表limit中,即limit[i]为第i个加油站加油的上限,
而从第i个加油站开车开到第(i+1)%n个加油站需要cost[i]升油,cost为一个列表。
现在有一辆开始时没有油的车,要从一个加油站出发绕这个公路跑一圈回到起点。
给你整数n,列表limit和列表cost,你来判断能否完成任务。
如果能够完成任务,输出起始的加油站编号,如果有多个,输出编号最小的。
如果不能完成任务,输出-1。
参考答案:
构造新的limit和cost并遍历,来源http://www.pythontip.com/coding/report_detail/3195/

ret = n                                # 返回值先取n(n不可能为有效结果)
for i in range(n):
    new_limit = limit[i:] + limit[:i] # 每次循环都构造新的limit和cost,起始点从0到n-1遍历
    new_cost = cost[i:] + cost[:i]
    gas,new_i = 0,0                    # 表示起始的油量和新的序号
    while new_i < n:
        gas = gas + new_limit[new_i] - new_cost[new_i] # 加油并消耗
        if gas < 0:                    # 油量小于0,则无法到达下一个加油站,退出当前循环
            break 
        new_i += 1
    else:
        ret = i                        # 循环到了n,确认可以到达终点,退出循环
        break
else:                                  # 遍历了全部构造的新limit和cost,无结果,返回-1
    ret = -1
print(ret)

20、判断是否存在相同数字

题目:给你一个整数列表L,判断L中是否存在相同的数字,
若存在,输出YES,否则输出NO。
参考答案:

L = [1,2,3,4,4,5]
print('YES' if len(L)!=len(set(L)) else 'NO')

相关文章

  • Python挑战100题(14~20)

    14、信息加密 题目:给你个小写英文字符串a和一个非负数b(0<=b<26), 将a中的每个小写字符替换成字母表中...

  • Python挑战100题(31~33)

    31、取石子问题 题目:有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有两种不同的取法...

  • Python挑战100题(37~40)

    37、回文数 Ⅰ 题目:若一个数(首位不为0)从左到右读与从右到左读都是一样,这个数就叫做回文数,例如12521就...

  • Python挑战100题(34~36)

    34、汉诺塔 题目:在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝...

  • Python挑战100题(21~26)

    21、山峰的个数 题目:十一假期,小P出去爬山,爬山的过程中每隔10米他都会记录当前点的海拔高度(以一个浮点数表示...

  • Python挑战100题(27~30)

    27、分拆素数和 题目:把一个偶数拆成两个不同素数的和,有几种拆法呢?现在来考虑考虑这个问题,给你一个不超过100...

  • Python挑战100题(11~13)

    11、人民币打印金额 题目:银行在打印票据的时候,常常需要将阿拉伯数字表示的人民币金额转换为大写表示,现在请你来完...

  • Python挑战100题(1~10)

    1、字符串逆序 题目:给你一个字符串 a, 请你输出逆序之后的a。例如:a=‘xydz’则输出:zdyx答:最简单...

  • All for PAT秋考 | 可能是2016.9甲级

    ?14 : 20 — 16 : 58 第一次两个半小时100/100。第三题真的挺难受的。难受的感觉现在都没完全消...

  • Python学习100例之1-10

    此Python版本为2.7,其他例子如下:Python学习100例之11-20Python学习100例之21-30...

网友评论

    本文标题:Python挑战100题(14~20)

    本文链接:https://www.haomeiwen.com/subject/gslklctx.html