Python Tip [1 ~ 20]

目录中首数字代表 Python Tip 中的题号;

编程环境:Python 3.7 under Windows 10 Professional 1809
IDE:JetBrains PyCharm Community Edition 2018.3.5 x64

2 列表排序


给你一个列表 L, 对L进行升序排序并输出排序后的列表。
例如:L = [8,2,50,3]
则输出:[2,3,8,50]

# 冒泡
L = [8,2,50,3]
for i in range(len(L)):
for j in range(len(L)):
if L[i]<L[j]:
temp=L[i]
L[i]=L[j]
L[j]=temp
print(L)
L=[2,8,3,50]
L.sort()
print(L)
L=[2,8,3,50] 
x = 0
y = len(L)
s = []
while x<y:
    s.append(min(L))
    L.remove(min(L))
    x = x + 1
print(s)

3 字符串逆序


给你一个字符串 a, 请你输出逆序之后的a。
例如:a=‘xydz’
则输出:zdyx

a=‘xydz’
print a[::-1] # 列表切片

# 字符串提取与相加
a=‘xydz’
l=''
for x in a:
    l = x + l
print l

4 输出字典key


给你一字典a,如a={1:1,2:2,3:3},输出字典a的key,以’,‘连接,如‘1,2,3’。要求key按照字典序升序排列(注意key可能是字符串)。
例如:a={1:1,2:2,3:3}, 则输出:1,2,3

# 即使 key 是字符串依然适用
a={1:1,2:2,3:3}
b=list(a.keys())
l=len(b)
c=[]
for i in range(l):
    c.append(str(b[i]))
print(",".join(c)) # 在列表 c 中插入 ","
# 看到别人的方法
a={"d":1,2:2,3:3}
print(','.join(str(n) for n in a.keys())) 

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


给你一个字符串 a, 输出a中奇数位置字符构成的字符串(位置编号从1开始)。
例如:a=‘xyzwd’
则输出:xzd

# 列表切片(字符串就是一个以 \0 结尾的字符列表)
print a[::2]
a='xyzwd'
x=''
for i in range(len(a)):
    if i % 2 == 0:
        x+=a[i]
print(x)
a='xyzwd'
b=[]
i=0
while i<=len(a)-1:
    b.append(a[i])
    i+=2
print("".join(b))

join()方法

6 求解100以内的所有素数


输出100以内的所有素数,素数之间以一个空格区分(注意,最后一个数字之后不能有空格)。

素数即质数,只能被 1 和 自身整除的大于 1 的正整数;

l=[]
for i in range(2,101):
    fg = 0 # 标记位
    for j in range(2,i-1):
        if i % j ==0: # 该正整数可以被除 1 和其自身外的正整数整除,那么它就不是质数
            fg = 1
            break
    if fg == 0:
        l.append(str(i)) # number 强制转换成 string 必须要在 append 时转换(合成成 string,不然就是 number list) 
print(' '.join(l))  #每个素数之间用空格分开

7 求矩形面积


已知矩形长a,宽b,输出其面积和周长,面积和周长以一个空格隔开。
例如:a = 3, b = 8
则输出:24 22

a = 3
b = 8
l=[]
l.append(str(a*b))
l.append(str(a*2+b*2))
# area=a*b
# perimeter=a*2+b*2
print(" ".join(l))

8 求中位数


给你一个整数列表L, 输出L的中位数(若结果为小数,则保留一位小数)。
例如: L=[0,1,2,3,4]
则输出:2

中位数就是一个有序序列中位于中间的数值,若该序列元素个数为奇数,则最中间的就是中位数,若为偶数,则最中间的两个数的均值为该有序序列的中位数

L=[3,0,1,2]
L.sort() # list 排序
l=len(L)
if l % 2 == 0 : # list 中共有偶数个数
    median = (L[int(l/2)] + L[int((l/2)-1)]) / 2.0  # 除法运算的结果的 type 为 float,float 不能作为 list 的 index,需进行强制转换成 int,这里除数是 2 还是 2.0 都没关系,都会自动转换成 float
else: # list 中共有奇数个数
    median = L[int(l/2)]
print(median)

9 最大公约数


给你两个正整数a和b, 输出它们的最大公约数。
例如:a = 3, b = 5
则输出:1
在这里插入图片描述

a=3
b=5
l1=[]
l2=[]
if a == 1 or b == 1: #考虑 a 和 b 都是 1 的情况
    print(1)
else:           #考虑 a 和 b 互为倍数的情况
    if a%b == 0:
        print(b)
    elif b%a == 0:
        print(a)
    else:      #除以上两种情况外的第三种情况
        for i in range(1,a+1):  #找出 a 的所有约数
            if a%i == 0:
                l1.append(i)
        for j in range(1,b+1):  #找出 b 的所有约数
            if b % j == 0:
                l2.append(j)
# print(set(l1)) # check the set
print(max(set(l1) & set(l2))) # 利用集合,取俩数集的交集的最大数

10 最小公倍数


给你两个正整数a和b, 输出它们的最小公倍数。
例如:a = 3, b = 5
则输出:15
在这里插入图片描述

a = 3
b = 5
l1=[]
l2=[]
if a == 1:
    print(b)
elif b == 1:
    print(a)
else:
    if a%b == 0:
        print(a)
    elif b%a == 0:
        print(b)
    else:
        for i in range(1,a+1):
            if a%i == 0:
                l1.append(i)
        for j in range(1,b+1):
            if b % j == 0:
                l2.append(j)
print((a*b)/(max(set(l1) & set(l2)))) # 把 list 转为集合 set ,利用集合的交集取俩交集中的最大元素,该元素为 a 、b 的最大公约数,而最小公倍数=最大公约数*各自的余数之积

11 结尾0的个数


给你一个正整数列表 L, 输出L内所有数字的乘积末尾0的个数。(提示:不要直接相乘,数字很多,相乘得到的结果可能会很大)。
例如: L=[2,8,3,50],
则输出:2

lambda 函数
redue 函数

from functools import reduce # python 3 中调用 reduce 需要 import...
L=[2,8,3,50]
m = reduce(lambda x, y: x * y, L) # 调用 lambda 匿名函数,reduce 函数会对 lambda 函数进行递归并积累计算结果(每次递归的计算结果会赋值给 lambda 的第一个参数 x)直到计算完最后一个输入参数
count = 0 # 记录 0 的个数
while (m % 10 == 0): # 判断 m 最后一位是否为 0
    count += 1
    m /= 10 # 去掉最后一个 0
print(count)

12 结尾非零数的奇偶性


给你一个正整数列表 L, 判断列表内所有数字乘积的最后一个非零数字的奇偶性。如果为奇数输出1,偶数则输出0.。
例如:L=[2,8,3,50]
则输出:0

from functools import reduce
L=[2,8,3,50]
product = 1
for i in range(len(L)): # 得到 list 内元素之积
    product *= L[i]
# product = reduce(lambda x,y:x*y,L) # 以上累积也可以用 reduce 和 lambda 得到
while (product % 10==0):
    product /= 10 # 去掉最后一位
if product % 2 == 0: # 判断最后一位是否为偶数
    print(0)
else:
    print(1)

13 光棍的悲伤(二进制数中 1 的个数)


光棍们对1总是那么敏感,因此每年的11.11被戏称为光棍节。小Py光棍几十载,光棍自有光棍的快乐。让我们勇敢地面对光棍的身份吧,现在就证明自己:给你一个整数a,数出a在二进制表示下1的个数,并输出。
例如:a=7
则输出:3

a=7
count = 0
x = str(bin(a)) # 得到 a 的二进制数(字符串格式)
for i in x:
    if i == '1':
        count += 1
print(count)
a = 7
print(str(bin(a)).count('1'))

14 Python之美(Python之禅)


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

from this import *
print(s)

15 大小写转换


给定一个字符串a, 将a中的大写字母 转换成小写,其它字符不变,并输出。
例如:a=“aaaaaabbbDDDDD”
则输出:aaaaaabbbddddd

a="aaaaaabbbDDDDD"
print(a.lower())
# print(a.upper()) # 转换成大写

16 人民币金额打印


银行在打印票据的时候,常常需要将阿拉伯数字表示的人民币金额转换为大写表示,现在请你来完成这样一个程序。
在中文大写方式中,0到10以及100、1000、10000被依次表示为: 零 壹 贰 叁 肆 伍 陆 柒 捌 玖 拾 佰 仟 万
以下的例子示范了阿拉伯数字到人民币大写的转换规则:
1 壹圆
11 壹拾壹圆
111 壹佰壹拾壹圆
101 壹佰零壹圆
-1000 负壹仟圆
1234567 壹佰贰拾叁万肆仟伍佰陆拾柒圆
现在给你一个整数a(|a|<100000000), 请你打印出人民币大写表示.
例如:a=1
则输出:壹圆

注意:请以Unicode的形式输出答案。提示:所有的中文字符,在代码中直接使用其Unicode的形式即可满足要求,中文的Unicode编码可以通过如下方式获得:u’壹’。
注意:代码无需声明编码!!不要在代码头部声明文件编码,否则会导致语法错误!
Note:数据已于2013-11-19日加强,原来通过的代码可能不能再次通过。

a=-56509234845
num_list=u"零壹贰叁肆伍陆柒捌玖"
wei_list=u'万圆拾佰仟万拾佰仟亿拾佰仟'
def GetDX(num):
    s=''
    flag=0 # 正负标记位:0-正,1-负
    if num<0:
        num=-num
        flag=1
    wei=len(str(num))
    for i in str(num): # 从头遍历参数 num
        s=s+num_list[int(i)]+wei_list[wei]
        wei=wei-1
    s=Modify(s)
    if num==0:
        s=u'零圆'
    if flag:
        s=u'负'+s
    return s
def Modify(s):
    if u'零仟' in s:
        s=s.replace(u'零仟',u'零')
    if u'零佰' in s:
        s=s.replace(u'零佰',u'零')
    if u'零拾' in s:
        s=s.replace(u'零拾',u'零')
    while u'零零' in s:
        s=s.replace(u'零零',u'零')
    if u'零万' in s:
        s=s.replace(u'零万',u'万')
    if u'零圆' in s:
        s=s.replace(u'零圆',u'圆')
    return s
ans=GetDX(a)
print(ans)#.deocde('utf-8')

17 公约数的个数


给你两个正整数a,b, 输出它们公约数的个数。
例如:a = 24, b = 36
则输出:6

a = 24
b = 36
l1=[]
l2=[]
count = 0
if a == 1 or b == 1: #考虑 a 和 b 都是 1 的情况
    count += 1
    print(count)
else:
    for i in range(1,a+1):  #找出 a 的约数
        if a%i == 0:
            l1.append(i)
    for j in range(1,b+1):  #找出 b 的约数
        if b % j == 0:
            l2.append(j)

print(len(set(l1) & set(l2))) # list 转换为 set ,求俩 set 的交集

18 逆解最大公约数与最小公倍数


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

在这里插入代码片
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Truffle7电子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值