python基础练习100打卡-Day01
今天也是学python的一天✌
今天开始python基础练习的打卡啦!希望能坚持下去,有所收获呀。
打卡练习题:菜鸟100实例
实例001
题目
有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
分析
- 个位、十位、百位的取值范围都是1、2、3、4
- 用for循环排列出所有可能,再从中选出满足条件的排列方式
- 用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的做法,特别基础,看了看人家的参考代码,瞧着点,好好学。
- 用数轴理清利润和提成的分布关系,感觉还蛮有用的
- 分别用两个列表来存储利润和提成的值
- 用到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。
-
则:x + 100 = n2, x + 100 + 168 = m2
-
计算等式:m2 - n2 = (m + n)(m - n) = 168
-
设置: m + n = i,m - n = j,i * j =168,i 和 j 至少一个是偶数(奇偶特性)
-
可得: m = (i + j) / 2, n = (i - j) / 2,i 和 j 要么都是偶数,要么都是奇数
-
从 3 和 4 推导可知道,i 与 j 均是大于等于 2 的偶数
-
由于 i * j = 168, j>=2,则 1 < i < 168 / 2 + 1
-
接下来将 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))
小结
还是要学好数学,具备一定的数学解题能力
简单了解下奇偶特性:
-
偶数个奇数相加减,结果为偶数
-
若几个整数的乘积是奇数,那么这几个数均为奇数
若几个整数的乘积是偶数,那么这几个数中至少有一个为偶数
-
和差同性
004
题目
输入某年某月某日,判断这一天是这一年的第几天?
分析
- 了解闰年平年的概念方便判断,“四年一闰,百年不闰,四百年再闰”(看到过的一个小口诀)
- 用一个列表存闰年每个月的天数,如果是平年再稍稍修改
代码
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}")
小结
正好可以复习下这长得如此像的俩兄弟,我会容易弄混淆,所以多记记笔记加深印象吧
两者区别:
- sort()是应用再list上的方法(1对1),sorted()则可以对所有可迭代的对象进行排序滴(1对多)
- sort()返回的是对已存在的列表直接进行操作的结果,sorted()返回的则是一个新的列表,对原列表没影响
卡!记录Day01打卡结束!给自己一个👍
继续加油(ง •_•)ง