python基础练习100打卡-Day01

这篇博客是作者进行Python基础练习的第一天打卡,涉及5个不同的编程实例,包括数字组合、奖金计算、完全平方数、日期判断和整数排序。通过实例分析和代码实现,作者分享了学习过程中的新思路和总结,强调了数学知识和编程技巧的重要性。
摘要由CSDN通过智能技术生成

python基础练习100打卡-Day01

今天也是学python的一天✌

今天开始python基础练习的打卡啦!希望能坚持下去,有所收获呀。

打卡练习题:菜鸟100实例

实例001

题目

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

分析

  1. 个位、十位、百位的取值范围都是1、2、3、4
  2. 用for循环排列出所有可能,再从中选出满足条件的排列方式
  3. 用count来记录满足要求的数的数量

代码

count = 0
for b in range(1, 5):
    for s in range(1, 5):
        for g in range(1, 5):
            if (b != s) and (b != g) and (s != g):
                count += 1
                print(b, s, g)
print("能组成{}个互不相同且无重复数字的三位数".format(count))

002

题目

企业发放的奖金根据利润提成。利润(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,求应发放奖金总数

分析

读完题,只想到了if-elif-else的做法,特别基础,看了看人家的参考代码,瞧着点,好好学。

  1. 用数轴理清利润和提成的分布关系,感觉还蛮有用的
  2. 分别用两个列表来存储利润和提成的值
  3. 用到for循环,每次循环计算一个区间的奖金数

代码

user = int(input("输入利润:"))
money = [0, 100000, 200000, 400000, 600000, 1000000]
rate = [0.1, 0.075, 0.05, 0.03, 0.015, 0.01]
total = 0
for i in range(5, -1, -1):
    if user > money[i]:
        total += (user - money[i]) * rate[i]
        user = money[i]
print("应发奖金{:.2f}元".format(total))

小结

按照以往见到这类题的做法,大都是if-else开始叭叭叭,这个解法就带来了一个全新的思路,挺好的,收获+1👍

003

题目

一个整数,它加上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(int(x))

小结

还是要学好数学,具备一定的数学解题能力

简单了解下奇偶特性

  1. 偶数个奇数相加减,结果为偶数

  2. 若几个整数的乘积是奇数,那么这几个数均为奇数

    若几个整数的乘积是偶数,那么这几个数中至少有一个为偶数

  3. 和差同性

004

题目

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

分析

  1. 了解闰年平年的概念方便判断,“四年一闰,百年不闰,四百年再闰”(看到过的一个小口诀)
  2. 用一个列表存闰年每个月的天数,如果是平年再稍稍修改

代码

s = input("输入年月日:")
year, month, day = map(int, s.split())
day_count = day
month_run = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
    for i in range(month-1):
        day_count += month_run[i]
else:
    month_run[1] = 28
    for i in range(month - 1):
        day_count += month_run[i]
print(f"{year}/{month}/{day}是这一年的第{day_count}天")

005

题目

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

分析

可以用sort()和sorted()

代码

pk = []
for i in range(3):
    num = int(input(f"请输入第{i+1}个数:"))
    pk.append(num)
# 使用sorted()函数
pk2 = sorted(pk)
print(f"三个数由小到大:{pk2}")
# 使用sort()方法
pk.sort()
print(f"三个数由小到大:{pk}")

小结

正好可以复习下这长得如此像的俩兄弟,我会容易弄混淆,所以多记记笔记加深印象吧

两者区别:

  1. sort()是应用再list上的方法(1对1),sorted()则可以对所有可迭代的对象进行排序滴(1对多)
  2. sort()返回的是对已存在的列表直接进行操作的结果,sorted()返回的则是一个新的列表,对原列表没影响

卡!记录Day01打卡结束!给自己一个👍

继续加油(ง •_•)ง

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值