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)