美文网首页
Python入门练习

Python入门练习

作者: ggr | 来源:发表于2018-06-03 17:12 被阅读0次

step1:题目:有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?

  • 分析: 可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列
for i in range(1,5):
    for j in range(1,5):
        for k in range(1,5):
            if (i!=j) and (i!=k) and (k!=j):
                print(i,j,k)

输出:

1 2 3
1 2 4
1 3 2
1 3 4
1 4 2
1 4 3
2 1 3
2 1 4
2 3 1
2 3 4
2 4 1
2 4 3
3 1 2
3 1 4
3 2 1
3 2 4
3 4 1
3 4 2
4 1 2
4 1 3
4 2 1
4 2 3
4 3 1
4 3 2

step2:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?

  • 分析:利用数轴来分界,定位,进行分段计算
i = int(input('净利润:'))
arr = [1000000,600000,400000,200000,100000,0]
rat = [0.01,0.015,0.03,0.05,0.075,0.1]
r = 0
for idx in range(1,6):
            if i>arr[idx]:
                r+=(i-arr[idx])*rat[idx]
                print("%s ~ %s的部分的奖金:%d" %((i-arr[idx]),arr[idx],(i-arr[idx])*rat[idx]))
                i=arr[idx]
print("总共应发奖金为:",r)

输出:

净利润:2000000
1400000 ~ 600000的部分的奖金:21000
200000 ~ 400000的部分的奖金:6000
200000 ~ 200000的部分的奖金:10000
100000 ~ 100000的部分的奖金:7500
100000 ~ 0的部分的奖金:10000
总共应发奖金为: 54500.0

step3:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

  • 分析:
    假设该数为 x。
    1、则:x + 100 = n2, x + 100 + 168 = m2
    2、计算等式:m2 - n2 = (m + n)(m - n) = 168
    3、设置: m + n = i,m - n = j,i * j =168,i 和 j 至少一个是偶数
    4、可得: m = (i + j) / 2, n = (i - j) / 2,i 和 j 要么都是偶数,要么都是奇数。
    5、从 3 和 4 推导可知道,i 与 j 均是大于等于 2 的偶数。
    6、由于 i * j = 168, j>=2,则 1 < i < 168 / 2 + 1。
    7、接下来将 i 的所有数字循环计算即可。
for i in range(1,85):
    if 168 % i ==0:
        j=168/i;
        if i>j and (i+j)%2 ==0 and (i-j)%2 ==0:
            m = (i+j)/2
            n=(i-j)/2
            x=n*n -100
            print(x)

输出结果:

-99.0
21.0
261.0
1581.0

step4:输入某年某月某日,判断这一天是这一年的第几天?

  • 分析:先按照平年来算,然后最后判断是不是平年,如果是平年就不用加1天,如果是闰年而且月份数超过了2的话就需要额外加1天。
year = int(input('please inout the year:\n'))
month = int(input('please input the month:\n'))
day = int(input('please input the date:\n'))
months = (0,31,59,90,120,151,181,212,243,273,304,334)
if 0<month <=12:
            sum = months[month-1]
else:
    print('date error')
sum+=day
leap = 0
if year%400==0 or ((year%100!=0) and (year%4==0)):
    leap = 1
if leap ==1 and month>2:
    sum+=1
print('it is the %dth day' % sum)

输出:

please inout the year:
2005
please input the month:
5
please input the date:
12
it is the 132th day

step5:输入三个整数x,y,z,请把这三个数由小到大输出。

  • 分析:直接借助python的列表来做排序,然后输出
x = int(input('please input the first number:\n'))
y = int(input('please input the second number:\n'))
z = int(input('please input the thrid number:\n'))
l=[]
l.append(x)
l.append(y)
l.append(z)
l.sort()
print(l)

输出:

please input the first number:
1
please input the second number:
6
please input the thrid number:
3
[1, 3, 6]

step6:斐波那契数列(Fibonacci sequence),又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……。
分析:在数学上,费波那契数列是以递归的方法来定义:
F0 = 0 (n=0)
F1 = 1 (n=1)
Fn = F[n-1]+ Fn-2

def fib(n):
    l = [0,1,2]
    if n>3:
        for i in range(3,n):
                l.append((l[i-2]+l[i-1]))
    print(l)
fib(10)

输出:

[0, 1, 2, 3, 5, 8, 13, 21, 34, 55]

step 7: 列表复制实现

l=[2,3,4,5]
b=l[:]#这里使用的是列表的截取,截取所有
print(b)

输出:

[2, 3, 4, 5]

step 8: 输出 9*9 乘法口诀表。

for i in range(1,10):
    print("\n")
    for j in range(1,i+1):
        print("%d*%d=%d "%(i,j,i*j),end='')

输出:

1*1=1

2*1=2 2*2=4

3*1=3 3*2=6 3*3=9

4*1=4 4*2=8 4*3=12 4*4=16

5*1=5 5*2=10 5*3=15 5*4=20 5*5=25

6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36

7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49

8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64

9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81

step 9: 暂停一秒输出。使用timer的sleep()

import time
myD = {'name':'ggr','age':24}
for key,value in dict.items(myD):
    print(key,value)
    time.sleep(1)

step10:格式化输出当前时间

import time,datetime

time.sleep(1)
TIME = datetime.datetime.now()
print(TIME.strftime("%Y-%m-%d %H:%M:%S"))

输出:

2018-06-03 16:26:02

step11:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
分析:兔子的规律为数列1,1,2,3,5,8,13,21....
这是一个典型的斐波那契数列
代码如上 step 6


step12:判断101-200之间有多少个素数,并输出所有素数。
分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。

from math import sqrt
leap=1
count = 0
for i in range(101,201):
    leap=1
    key = int(sqrt(i+1))
    for j in range(2,key+1):
        if(i%j==0):
            leap = 0
            break
    if leap == 1:
        count+=1
        print(i,end=', ')
print('\n总共有%d个质数'% count)

输出:

101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199,
总共有21个质数

--- step 13: 打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。

  • 分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。
for i in range(100,1000):
    b = i//100
    s = (i//10)%10
    g = i%10
    if i == pow(b,3)+pow(s,3)+pow(g,3):
        print(i,end=' ')

输出:

153 370 371 407

相关文章

网友评论

      本文标题:Python入门练习

      本文链接:https://www.haomeiwen.com/subject/allmrftx.html