前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2019年学习Python-day7作业

2019年学习Python-day7作业

原创
作者头像
qq317062516
修改2019-12-20 17:32:00
4200
修改2019-12-20 17:32:00
举报
文章被收录于专栏:python学习2020
代码语言:python
代码运行次数:0
复制
# 1 .题目:有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
# 程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。

list0 = [1, 2, 3, 4]
list1 = [(100 * x + 10 * y + z) for x in list0 for y in list0
         if y != x for z in list0 if z != y if z != x]
print('能组成%s个互不相同且无重复数字的三位数,分别是%s' % (len(list1), list1))


# 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,求应发放奖金总数?
# 程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型

profit = [1000000, 600000, 400000, 200000, 100000, 0]
rate = [0.01, 0.015, 0.03, 0.05, 0.075, 0.1]
bonus = 0
try:
    in_profit = int(input('请输入当月利润:'))
    for index in range(6):                            # 索引是0-5 
        if in_profit > profit[index]:
            bonus += (in_profit - profit[index]) * rate[index]
            in_profit = profit[index]
    print('应发放奖金总数是%d' % int(bonus))
except Exception as e:
    print('请输入正确数字')

# 3.题目:一个整数,它加上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 的所有数字循环计算即可。

list3 = [(int((i + j) / 2) ** 2 - 100 - 168, int((i - j) / 2) ** 2 - 100)
         for i in range(2, 85) for j in range(2, 85) if i * j == 168]
         # m的平方-100-168 等于x  (i+j)/2 等于m      n的平分-100 等于x  (i-j)/2 等于n
list4 = []
for i in set(list3):
    if i[0] == i[1]:
        list4.append(i[0])
        list4.sort()
print('这个数可以是%s' % '或'.join(str(i) for i in list4))


# 4. 题目:输入某年某月某日,判断这一天是这一年的第几天?
#
# 程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,
# 特殊情况,闰年且输入月份大于2时需考虑多加一天:

list_day = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30]
list_month = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
date_str = input('Enter the datetime(20170228):')
month = int(date_str[4:6])
year = int(date_str[:4])
day = int(date_str[-2:])
if year % 4 == 0 and year % 100 != 0:
    if month > 2:
        day += 1
i = 0
sum_day = 0
while month >= list_month[i]:
    sum_day += list_day[i]
    i += 1
    if month == list_month[i - 1]:
        sum_day += day
        break
print('%d月%d日是%d年的第%d天.' % (month, day, year, sum_day))

# 5. 题目:输入三个整数x,y,z,请把这三个数由小到大输出。
#
# 程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,
# 如果x>z则将x与z的值进行交换,这样能使x最小

x = int(input('请输入第一个数字:'))
y = int(input('请输入第二个数字'))
z = int(input('请输入第三个数字'))
print('你输入的三个数字是', x, y, z)
while True:
    if x <= y <= z:
        break
    if x > y:
        x, y = y, x
    elif x > z:
        x, z = z, x
    elif y > z:
        y, z = z, y
print('排序后是', x, y, z)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档