Pythontip题目解答一

题目来源:www.pythontip.com

1、just print a+b

give you two var a and b, print the value of a+b, just do it!!
print a + b

2、list排序

给你一个list L, 如 L=[2,8,3,50], 对L进行升序排序并输出,
如样例L的结果为[2,3,8,50]
print sorted(L)

3、字符串逆序

给你一个字符串 a, 如a=‘12345’,对a进行逆序输出a。
print a[::-1]

4、输出字典key

给你一字典a,如a={1:1,2:2,3:3},输出字典a的key,以','链接,如‘1,2,3'。
print ','.join(i for i in a.keys())

5、输出字符奇数位置的字符串

给你一个字符串 a, 输出字符奇数位置的字符串。如a=‘12345’,则输出135。
print a[::2]

6、求100以内所有素数

输出100以内的所有素数,素数之间以一个空格区分
for i in range(2, 100):
    a = 0
    for j in range(1, i):
        if i % j == 0:
            a += 1
    if a == 1:
        print i,
print

7、求矩形面积

已知矩形长a,宽b,输出其面积和周长,面积和周长以一个空格隔开
print a*b, (a+b)*2

8、求中位数

给你一个list L, 如 L=[0,1,2,3,4], 输出L的中位数(若结果为小数,则保留一位小数)。
L.sort()
print (L[len(L)/2]+L[len(L)/2-1])/2.0 if len(L)%2==0 else L[(len(L)-1)/2]

9、最大公约数

给你两个正整数a和b, 输出它们的最大公约数。
a, b = max(a, b), min(a, b)
while True:
    if a % b == 0:
        print b
        break
    else:
        a, b = max(b, a-b), min(b, a-b)

10、最小公倍数

给你两个正整数a和b, 输出它们的最小公倍数。
m, n = max(a, b), min(a, b)
while True:
    if m % n == 0:
        print a*b/n
        break
    else:
        m, n = max(n, m-n), min(n, m-n)

11、结尾0的个数

给你一个正整数列表 L, 如 L=[2,8,3,50], 输出L内所有数字的乘积末尾0的个数,
如样例L的结果为2.(提示:不要直接相乘,数字很多,可能溢出)
a = L[0]
sum = 0
for i in range(len(L) - 1):
    a = a * L[i + 1]
    while (True):
        if (a % 10 == 0):
            a = a / 10
            sum += 1
        else:
            a = a % 10
            break

print sum

12、结尾非零数的奇偶性

给你一个正整数列表 L, 如 L=[2,8,3,50], 判断列表内所有数字乘积的最后一个非零数字的奇偶性, 奇数输出1,偶数输出0. 如样例输出应为0。
a = L[0]
for i in range(len(L)-1):
    a = a * L[i+1]
    while(True):
        if(a%10 == 0):
            a = a/10
        else:
            a = a % 10
            break

if a%2 == 0:
    print 0
else:
    print 1

13、光棍的悲哀

光棍们对1总是那么敏感,因此每年的11.11被戏称为光棍节。
鄙人光棍几十载,光棍自有光棍的快乐。让我们勇敢面对光棍的身份吧,
现在就证明自己:给你一个整数a,数出a在二进制表示下1的个数,并输出。
ba = bin(a)[2:]
sum = 0
for i in range(len(ba)):
    if ba[i] == '1':
        sum += 1

print sum

14、python之美

输出Python之禅
注意:输出python之禅的源码即可,不用转换为英文。(小小的提示:print this.s)
import this
print this.is

15、大小写转换

给定一个字符串a, 将a中的大写字母 转换成小写,其它字符不变,并输出。
print a.lower()

16、人民币金额打印(注:本题在本地测试结果正常,在线提交出现问题,应该是编码问题)

银行在打印票据的时候,常常需要将阿拉伯数字表示的人民币金额转换为大写表示,现在请你来完成这样一个程序。
在中文大写方式中,0到10以及100、1000、10000被依次表示为:
    零壹贰叁肆伍陆柒捌玖拾佰仟万
以下的例子示范了阿拉伯数字到人民币大写的转换规则:

1	壹圆
11	壹拾壹圆
111	壹佰壹拾壹圆
101	壹佰零壹圆
-1000	负壹仟圆
1234567	壹佰贰拾叁万肆仟伍佰陆拾柒圆

现在给你一个整数a(|a|<100000000), 打印出人民币大写表示.
注意:请以Unicode的形式输出答案。你可以通过decode("utf8")来将utf8格式的字符串解码为Unicode,例如你要输出ans = "零圆", print ans.decode("utf8").
Note:数据已于2013-11-19日加强,原来通过的代码可能不能再次通过。
if (a < 0):
    a = abs(a)
    res = '负'
else:
    res = ''

sa = str(a)
lena = len(sa)

dic = {4: '千', 3: '百', 2: '十', 1: ''}
dic1 = {1: '壹', 2: '贰', 3: '叁', 4: '肆', 5: '伍', 6: '陆', 7: '柒', 8: '捌', 9: '玖'}


def jisuan(b):
    s = ''
    lenb = len(b)
    for i in range(lenb):
        if (b[i] != '0'):
            s += dic1[int(b[i])] + dic[lenb - i]
        else:
            if (i != (lenb - 1) and b[i + 1] != '0'):
                s += '零'
    return s


if lena > 4:
    s1 = sa[:-4:]
    s2 = sa[-4::]
    res += jisuan(s1) + '万' + jisuan(s2)
else:
    res += jisuan(sa)

print res + '圆'

17、公约数的个数

给你两个正整数a,b,  输出它们公约数的个数。
a, b = max(a, b), min(a, b)
sum = 0
for i in range(1, b+1):
    if(a%i==0 and b%i==0):
        sum += 1
print sum

18、逆解最大公约数和最小公倍数

我们经常遇到的问题是给你两个数,要你求最大公约数和最小公倍数。
今天我们反其道而行之,给你两个数a和b,计算出它们分别是哪两个数的最大公约数和最小公倍数。
输出这两个数,小的在前,大的在后,以空格隔开。若有多组解,输出它们之和最小的那组。
注:所给数据都有解,不用考虑无解的情况。
a, b = min(a, b), max(a, b)
c = b / a

def fenjie(num):
    for i in range(2, int(math.sqrt(num))+1):
        if num % i == 0:
            x, y = i, num / i
            if y % x != 0:
                return x
    return 1

d = fenjie(c)

print a*d, c/d*a

19、单身情歌

抓不住爱情的我 
总是眼睁睁看它溜走 
...

现在来练习一下发现爱的能力,给你一个字符串a,如果其中包含"LOVE"(love不区分大小写)则输出LOVE,否则输出SINGLE。
a = a.upper()
if a.find('LOVE') != -1:
    print 'LOVE'
else:
    print 'SINGLE'

20、信息加密

给你个小写英文字符串a和一个非负数b(0<=b<26), 将a中的每个小写字符替换成字母表中比它大b的字母。
这里将字母表的z和a相连,如果超过了z就回到了a。例如a="cagy",b=3, 则输出 fdjb
print ''.join(chr(97+(ord(i)+b-97)%26) for i in a)

21、回文子串

给你一个字符串a和一个正整数n,判断a中是否存在长度为n的回文子串。如果存在,则输出YES,否则输出NO。
回文串的定义:记串str逆序之后的字符串是str1,若str=str1,则称str是回文串,如"abcba".
flag = False
for i in range(len(a)-n+1):
    str = a[i:i+n]
    if str == str[::-1]:
        flag = True
        print 'YES'
        break

if not flag:
    print 'NO'

22、时间就是金钱

给你两个时间st和et(00:00:00<=st <= et<=23:59:59), 请你给出这两个时间间隔的秒数。
如:st="00:00:00", et="00:00:10", 则输出10.
t = [0, 0, 0]
for i in range(3):
    t[i] = int(et.split(':')[i])-int(st.split(':')[i])

print t[0]*3600+t[1]*60+t[2]

23、365 or 366?

一年有多少天,这是个大问题,很值得思考。现在给你一个年份year(year为四位数字的字符串,如"2008","0012"),
你输出这一年的天数。如year="2013", 则输出365。
y = int(year)
if (y % 4 == 0 and y % 100 != 0) or y % 400 == 0:
    print '366'
else:
    print '365'

25、格式化时间

给你一个时间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。
print '{year}-{month:0>2}-{day:0>2} {hour:0>2}:{minute:0>2}:{second:0>2}'.format(**t)

26、序列判断

给你一个整数组成的列表L,按照下列条件输出:
若L是升序排列的,则输出"UP";
若L是降序排列的,则输出"DOWN";
若L无序,则输出"WRONG"。
L1 = sorted(L)
L2 = L1[::-1]

if L1==L:
    print 'UP'
elif L2==L:
    print 'DOWN'
else:
    print 'WRONG'

28、相同数字

给你一个整数列表L,判断L中是否存在相同的数字,
若存在,输出YES,否则输出NO。
L = sorted(L)
flag = False
for i in range(len(L)-1):
    if L[i] == L[i+1]:
        flag = True
        print 'YES'
        break

if not flag:
    print 'NO'

29、判断三角形

给你三个整数a,b,c,  判断能否以它们为三个边长构成三角形。
若能,输出YES,否则输出NO。
L = sorted(L)
if L[0] + L[1] > L[2] and L[2] - L[0] < L[1]:
    print 'YES'
else:
    print 'NO'

30、National Day

马上国庆节了,用一个英文单词描述你此时此刻的心情。
print 'Happy'

31、山峰的个数

十一假期,小P出去爬山,爬山的过程中每隔10米他都会记录当前点的海拔高度(以一个浮点数表示),
这些值序列保存在一个由浮点数组成的列表h中。回到家中,小P想研究一下自己经过了几个山峰,请你帮他计算一下,输出结果。
例如:h=[0.9,1.2,1.22,1.1,1.6,0.99], 将这些高度顺序连线,会发现有两个山峰,故输出一个2(序列两端不算山峰)
sum = 0
for i in range(1, len(h)-1):
    if h[i] > h[i-1] and h[i] >= h[i+1]:
        sum += 1
print sum

32、三角形形状

给以一个三角形的三边长a,b和c(边长是浮点数),请你判断三角形的形状。
若是锐角三角形,输出R,
若是直角三角形,输出Z,
若是钝角三角形,输出D,
若三边长不能构成三角形,输出W.
L = [a, b, c]
L = sorted(L)
if L[0] + L[1] > L[2] and L[2] - L[0] < L[1]:
    n1 = L[0]**2 + L[1]**2
    n2 = L[2]**2
    if n1 > n2:
        print 'R'
    elif n1 == n2:
        print 'Z'
    else:
        print 'D'
else:
    print 'W'

33、大幂次运算

给你两个正整数a(0 < a < 100000)和n(0 <= n <=100000000000),计算(a^n) % 20132013并输出结果
print pow(a, n, 20132013)

您可能还喜欢...