码迷,mamicode.com
首页 > 编程语言 > 详细

python练习题1-10

时间:2017-07-07 18:13:44      阅读:277      评论:0      收藏:0      [点我收藏+]

标签:app   完全   sleep   itertools   奇数   最大   范围   时间   strftime   

1、有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
2、企业发放的奖金根据利润提成。利润(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,求应发放奖金总数?
3、一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
4、输入某年某月某日,判断这一天是这一年的第几天?
5、输入三个整数x,y,z,请把这三个数由小到大输出。
6、斐波那契数列。
7、将一个列表的数据复制到另一个列表中。
8、输出 9*9 乘法口诀表。
9、暂停一秒输出。
10、暂停一秒输出,并格式化当前时间。

1、有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
方法一:
1 l = []
2 for i in range(1,5):
3     for j in range(1,5):
4         for m in range(1,5):
5             if len({i,j,m}) == 3:
6                 l.append(i * 100 + j * 10 + m)
7 print(l)
8 print(len(l))
1 [123, 124, 132, 134, 142, 143, 213, 214, 231, 234, 241, 243, 312, 314, 321, 324, 341, 342, 412, 413, 421, 423, 431, 432]
2 24
方法二:
1 from itertools import permutations
2 
3 l = []
4 for i in permutations([1, 2, 3, 4], 3):
5     l.append(i)
6 
7 print(l)
8 print(len(l))
1 [(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)]
2 24

2、企业发放的奖金根据利润提成。利润(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,求应发放奖金总数?
方法一:
 1 # 这是最弱的方法,然而我想到的就是这种。。
 2 a = [1000000,600000,400000,200000,100000,0]
 3 b = [0.01,0.015,0.03,0.05,0.075,0.1]
 4 x = int(input(销售利润是:))
 5 
 6 if x >= a[0]:
 7     bonus = (x - a[0]) * b[0] + 400000 * b[1] + 200000 * b[2] + 200000 * b[3] + 100000 * b[4] + 100000 * b[5]
 8     print(提成是:,bonus)
 9 elif a[0] > x >= a[1]:
10     bonus = (x - a[1]) * b[1] + 200000 * b[2] + 200000 * b[3] + 100000 * b[4] + 100000 * b[5]
11     print(提成是:, bonus)
12 elif a[1] > x >= a[2]:
13     bonus = (x - a[2]) * b[2] + 200000 * b[3] + 100000 * b[4] + 100000 * b[5]
14     print(提成是:, bonus)
15 elif a[2] > x >= a[3]:
16     bonus = (x - a[3]) * b[3] + 100000 * b[4] + 100000 * b[5]
17     print(提成是:, bonus)
18 elif a[3] > x >= a[4]:
19     bonus = (x - a[4]) * b[4] + 100000 * b[5]
20     print(提成是:, bonus)
21 elif a[4] > x >= a[5]:
22     bonus = (x - a[5]) * b[5]
23     print(提成是:, bonus)
24 elif x < 0:
25     print(x必须大于0)
1 销售利润是:200001
2 提成是: 17500.05
方法二:
 1 # 参考别人的
 2 a = [1000000, 600000, 400000, 200000, 100000, 0]
 3 b = [0.01, 0.015, 0.03, 0.05, 0.075, 0.1]
 4 count = 0
 5 while count < 5:
 6     x = int(input(销售利润是:))
 7     sum = 0
 8     for n in range(0,6):
 9         if x > a[n]:
10             tmp = (x-a[n])*b[n] # 计算该级别的提成
11             sum += tmp
12             x = a[n]  # 后续的每一级都计算满额提成
13     print(sum)
14     count += 1

 

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

方法一:

import math

x = -99  # 这个值是后面看别人答案时想到的,x+100必须大于0
while x < 10000:
    if math.pow(int(math.sqrt(x+100)),2) == x+100:
        if math.pow(int(math.sqrt(x + 100 + 168)), 2) == x + 100 + 168:  # 简单列等式,谁不会。。。mdzz
# print(x) x += 1

方法二:看了别人的思路,我觉得我俨然是个弱智。

‘‘‘
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 的所有数字循环计算即可。
‘‘‘

i = 1
#求出最大范围
while ((i+1)*(i+1)-i*i) <= 168:
      i += 1
#循环测试并打印
for j in range(1,i):
    for k in range(1,i):
        if (k*k - j*j) == 168:
            print(k*k-268)

 

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

方法一:

import datetime

Y = int(input(年:))
m = int(input(月:))
d = int(input(日:))

days = datetime.datetime(Y,m,d) - datetime.datetime(Y,1,1) + datetime.timedelta(1)  # 减去当年1月1日
n = int(str(days).split( )[0])
print(n)


年:2003
月:12
日:2
336

方法二:

import time
# D=input("请输入年份,格式如XXXX-XX-XX:")
D=2017-4-3
d=time.strptime( D,%Y-%m-%d).tm_yday
# print("the {} day of this year!" .format(d))
print(d)
print(time.strptime( D,%Y-%m-%d))



# 或使用datetime模块
import datetime
print(datetime.date(2017,4,3).timetuple().tm_yday)
print(datetime.date(2017,4,3).timetuple())
93
time.struct_time(tm_year=2017, tm_mon=4, tm_mday=3, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=93, tm_isdst=-1)
93
time.struct_time(tm_year=2017, tm_mon=4, tm_mday=3, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=93, tm_isdst=-1)

 

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

方法一

L = [a,b,c]
L.sort()
print(\n.join(l))

方法二:

 1 # 最弱智的做法
 2 # a = input(‘a=‘)
 3 # b = input(‘b=‘)
 4 # c = input(‘c=‘)
 5 a = 10
 6 b = 20
 7 c = 30
 8 
 9 l = []
10 
11 l.append(a)
12 if b < a:
13     l.insert(0,b)
14     if c < b:
15         l.insert(0,c)
16     elif c > a:
17         l.append(c)
18     else:
19         l.insert(1,c)
20 else:
21     l.append(b)
22     if c < a:
23         l.insert(0,c)
24     elif c > b:
25         l.append(c)
26     else:
27         l.insert(1,c)
28 
29 print(\n.join(l))

方法三:

# 冒泡法
a=[1,3,5,2,4,5,7]

n=len(a)

for i in range(0,n):
  for j in range(i,n) :
     if (a[i] >= a[j] ):
        a[i],a[j] = a[j],a[i]

print(a)
[1, 2, 3, 4, 5, 5, 7]

6、斐波那契数列。
方法一:
l = [0,1]

def f(n):
    for x in range(n):
        l.append(l[x]+l[x+1])

f(20)
print(l)
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946]

方法二:

# 使用递归
def fib(n):
    if n == 1 or n == 2:
        return 1
    return fib(n - 1) + fib(n - 2)


# 输出了第10个斐波那契数列
print(fib(20))

7、将一个列表的数据复制到另一个列表中。
a = list(range(20))
b = a[:]

print(a)
print(b)
print(id(a))
print(id(b))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
2030007944584
2030007104200

8、输出 9*9 乘法口诀表。
 1 # 先百度一下乘法口诀表长什么样子,怎么排列的
 2 ‘‘‘
 3 乘法口诀表如下:
 4 1*1=1
 5 2*1=2 2*2=4
 6 3*1=3 3*2=6 3*3=9
 7 4*1=4 4*2=8 4*3=12 4*4=16
 8 5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
 9 6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
10 7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
11 8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
12 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
13 ‘‘‘
14 formula = {a} * {b} = {c}
15 
16 s = ‘‘
17 for i in range(1,10):
18     print(s)
19     s = ‘‘
20     for j in range(1,i+1):
21         s += formula.format(a=i,b=j,c=i*j) +  
22         # print(formula.format(a=i,b=j,c=i*j))
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、暂停一秒输出。
import time


for n in range(1,10):
    print(n)
    time.sleep(1)

10、暂停一秒输出,并格式化当前时间。
import time

for i in range(5):
    struct_time = time.localtime(time.time())
    t = time.strftime(%Y-%m-%d %H:%M:%S,struct_time)
    t = time.strftime(%Y-%m-%d,struct_time)
    print(t)
    time.sleep(1)

 

python练习题1-10

标签:app   完全   sleep   itertools   奇数   最大   范围   时间   strftime   

原文地址:http://www.cnblogs.com/fat39/p/7133336.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!