PythonTip(6~10)题详解

题目6:题目:求解100以内的所有素数

描述:输出100以内的所有素数,素数之间以一个空格区分

分析:这个题我在以往的博客中写了好几次了,这里要注意的一点就是,最后一个空格一定要去掉,否则提交后会报错。

答案:

l=[]
for i in range(2,101):
    fg = 0
    for j in range(2,i-1):
        if i % j ==0:
            fg = 1
            break
    if fg == 0:
        l.append(str(i))
print ' '.join(l)  #每个素数之间用空格分开
举一反三

1.输出100以内所有的素数(格式不要求)

# -*- coding: UTF-8 -*-
x = range(2,101)
for j in x:
    i = 2  #除数从 2 开始,没问题吧?嘿嘿
    while i < j:
        if j % i == 0:
            break
        i = i + 1
    if i == j:
        print j,

2.输出100以内所有的素数(格式不要求)

# -*- coding: UTF-8 -*-

for j in range(2,101):
    fg = 0
    for i in range(2,j-1):
        if j % i == 0:
            fg = 1
            break
    if fg == 0:
        print j,

3.输出100以内所有的素数(格式不要求)

# -*- coding: UTF-8 -*-
def isPrimer(x):
    if len([n for n in range(2, x) if (x%n == 0)]) == 0:
        return True

for i in filter(isPrimer, range(2, 100)):
    print i,

题目7:求矩形面积

描述:已知矩形长a,宽b,输出其面积和周长,面积和周长以一个空格隔开

分析:要知道矩形面积 s=a*b,周长 l = 2*a+2*b,这题不难吧

答案:

s = 2*a+2*b
m = a*b
print m,s

题目8:求中位数

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

分析:首先知道什么是中位数,中位数是指将统计总体当中的各个值按大小顺序排列起来,形成一个数列,如果值的个数是单数,则处于数列中间位置的值就称为中位数,如果值的个数是双数,则处于数列中间位置的两个值的平均值就称为中位数.

答案:

L.sort()

if len(L)%2!=0:
    print L[len(L)/2]
else:
    print  (L[len(L)/2-1]+L[len(L)/2])/2.0  

题目9:最大公约数

描述:给你两个正整数a和b, 输出它们的最大公约数。

分析:求最大公约数,就是要分别找到这两个数的约数,再进行比较。

答案:

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 max(set(l1) & set(l2)) #利用集合的性质将公约数找出
举一反三

1.

# -*- coding: UTF-8 -*-
a = 14
b = 28
maxno = max(a,b)
for i in range(1,maxno):
    if (a % i == 0) & (b % i == 0):
        thisnumber = i
print thisnumber

2.辗转相除法

# -*- coding: UTF-8 -*-
a = 14
b = 28
if a>b:
    a,b = b,a
while b % a != 0:
    a,b = b % a, a
print a

3.一行代码解决问题(不太提倡,不易锻炼逻辑思维)

# -*- coding: UTF-8 -*-
a = 1
b = 28

print(max([x for x in range(1,a) if a%x==0 and b%x==0]))

题目10:最小公倍数

描述:给你两个正整数a和b, 输出它们的最小公倍数

分析:公约数都会求了,公倍数就很容易了

答案:

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)))
举一反三

1.

# -*- coding: UTF-8 -*-
a = 15
b = 28
sum = a*b
if b>a:
    a,b=b,a
while a%b!=0:
    b,a = a%b,b
print sum/b

2.

# -*- coding: UTF-8 -*-
a = 15
b = 28
def gcd(a, b):
    if a < b:
        a, b = b, a
    r = a % b
    while r != 0:
        a = b
        b = r
        r = a % b
    return b
print(a * b / gcd(a, b))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值