14、信息加密
題目:給你個(gè)小寫英文字符串a(chǎn)和一個(gè)非負(fù)數(shù)b(0<=b<26), 將a中的每個(gè)小寫字符替換成字母表中比它大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佛猛、回文子串
題目:給你一個(gè)字符串a(chǎn)和一個(gè)正整數(shù)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、時(shí)間就是金錢
題目:給你兩個(gè)時(shí)間st和et(00:00:00<=st <= et<=23:59:59), 請你給出這兩個(gè)時(shí)間間隔的秒數(shù)川抡。
如: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辐真、格式化時(shí)間
題目:給你一個(gè)時(shí)間t(t是一個(gè)字典,共有六個(gè)字符串key(year,month,day,hour,minute,second),值為每個(gè)值為數(shù)字組成的字符串崖堤,
如t={'year':'2013','month':'9','day':'30','hour':'16','minute':'45','second':'2'}
請將其按照以下格式輸出拆祈, 格式:XXXX-XX-XX XX:XX:XX。如上例應(yīng)該輸出: 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、序列判斷
題目:給你一個(gè)整數(shù)組成的列表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钧敞、加油站
題目:一個(gè)環(huán)形的公路上有n個(gè)加油站蜡豹,編號(hào)為0,1,2,...n-1,
每個(gè)加油站加油都有一個(gè)上限,保存在列表limit中溉苛,即limit[i]為第i個(gè)加油站加油的上限镜廉,
而從第i個(gè)加油站開車開到第(i+1)%n個(gè)加油站需要cost[i]升油,cost為一個(gè)列表。
現(xiàn)在有一輛開始時(shí)沒有油的車愚战,要從一個(gè)加油站出發(fā)繞這個(gè)公路跑一圈回到起點(diǎn)娇唯。
給你整數(shù)n,列表limit和列表cost,你來判斷能否完成任務(wù)寂玲。
如果能夠完成任務(wù)塔插,輸出起始的加油站編號(hào),如果有多個(gè),輸出編號(hào)最小的拓哟。
如果不能完成任務(wù)想许,輸出-1。
參考答案:
構(gòu)造新的limit和cost并遍歷,來源http://www.pythontip.com/coding/report_detail/3195/
ret = n # 返回值先取n(n不可能為有效結(jié)果)
for i in range(n):
new_limit = limit[i:] + limit[:i] # 每次循環(huán)都構(gòu)造新的limit和cost,起始點(diǎn)從0到n-1遍歷
new_cost = cost[i:] + cost[:i]
gas,new_i = 0,0 # 表示起始的油量和新的序號(hào)
while new_i < n:
gas = gas + new_limit[new_i] - new_cost[new_i] # 加油并消耗
if gas < 0: # 油量小于0流纹,則無法到達(dá)下一個(gè)加油站糜烹,退出當(dāng)前循環(huán)
break
new_i += 1
else:
ret = i # 循環(huán)到了n,確認(rèn)可以到達(dá)終點(diǎn)漱凝,退出循環(huán)
break
else: # 遍歷了全部構(gòu)造的新limit和cost疮蹦,無結(jié)果,返回-1
ret = -1
print(ret)
20碉哑、判斷是否存在相同數(shù)字
題目:給你一個(gè)整數(shù)列表L,判斷L中是否存在相同的數(shù)字挚币,
若存在,輸出YES扣典,否則輸出NO妆毕。
參考答案:
L = [1,2,3,4,4,5]
print('YES' if len(L)!=len(set(L)) else 'NO')