打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Python100道题从“无”到“有”,每日监督打卡学习第一期:1

📢📢📢📣📣📣
🌻🌻🌻Hello,大家好我叫是Dream呀,一个有趣的Python博主,小白一枚,多多关照😜😜😜
🏅🏅🏅CSDN Python领域新星创作者,大二在读,欢迎大家找我合作学习
💕入门须知:这片乐园从不缺乏天才,努力才是你的最终入场券!🚀🚀🚀
💓最后,愿我们都能在看不到的地方闪闪发光,一起加油进步🍺🍺🍺
🍉🍉🍉“一万次悲伤,依然会有Dream,我一直在最温暖的地方等你”,唱的就是我!哈哈哈~🌈🌈🌈
🌟🌟🌟✨✨✨

前言: 这里记录一下自己刷一百道题的心路历程吧,每十道题发一篇文章,希望大家可以从中学习到知识,也希望自己能够坚持下去吧!欢迎大家前来一起监督学习!

每日监督打卡学习第一期:1-10题

  • 第一题
    • 1.题目
    • 2.代码
    • 3.思路
  • 第二题
    • 1.题目
    • 2.代码
    • 3.思路
  • 第三题
    • 1.题目
    • 2.代码
    • 3.思路
  • 第四题
    • 1.题目
    • 2.代码
    • 3.思路
  • 第五题
    • 1.题目
    • 2.代码1
    • 3.思路
    • 4.代码2
  • 第六题
    • 1.题目
    • 2.代码
    • 3.思路
  • 第七题
    • 1.题目
    • 2.代码1
    • 3.思路1
    • 4.代码2
    • 5.思路2
    • 6.代码3
    • 7.思路3
    • 8.代码4
    • 9.思路4
  • 第八题
    • 1.题目
    • 2.代码
    • 3.思路
  • 第九题
    • 1.题目
    • 2.代码
    • 3.思路
  • 第十题
    • 1.题目
    • 2.代码
    • 3.思路

第一题

1.题目

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

2.代码

a=[]
for i in range(1,5):
    for j in range(1,5):
        for k in range(1,5):
            if (i!=j)and(j!=k)and(i!=k):
                a.append([i,j,k])
print(len(a))
print(a)

3.思路

三重循环,也没啥很特别的,正常思路想到的就是三重循环吧。唯一的一点需要注意的我觉得就是这个列表的创建吧。
因为题目中说要求先这些三位数的个数进行输出,还需要再把这些数分别输出,首先考虑的还是列表,列表中的len()函数还是很好用的,直接把符合的数据加入列表后面,然后计算长度,最好把列表输出。

第二题

1.题目

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,求应发放奖金总数?

2.代码

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(0,6):
    if i>arr[idx]:
        r+=(i-arr[idx])*rat[idx]
        print ((i-arr[idx])*rat[idx])
        i=arr[idx]
print(r)

3.思路

思路方面,首先我第一反应便是分段,这确实是能想到的最简单的也是最好用的,但是那样确实有点浪费时间,所以说参考了一下别人的算法,算是写出了一个更加方便计算的程序吧。
首先创建的这两个列表的话,第一个就是我们的利润区间,第二个是我们的收成区间。range(0,6)也就是0-5六个数,分别对应我们的六个利润区间和收成区间。每次遍历一次,确定我们的利润区间,确定之后,减去这个区间的值,从而用差值乘以我们的收成比例系数求出我们的收成。然后剩下的利润便是当前利润区间的值,从而继续遍历!最后依次相加,输出收成总和。

第三题

1.题目

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

2.代码

import math
n = 0
for n in range(-100, 10000):
    n+=1
    x=int(math.sqrt(n + 100))
    y=int(math.sqrt(n+100+168))
    if(x**2==n+100 and y**2==n+100+168):
        print(n)

3.思路

算来算去,我还是感觉math函数最流氓最好用!math.sqrt(n + 100)直接求其平方根,然后取整,倒着来算其是否符合条件。最后math.sqrt()函数YYDS!!!

第四题

1.题目

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

2.代码

year = int(input('请输入哪一年:'))
month = int(input('第几个月:'))
day = int(input('几号:'))
k = 0
a = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
b = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
if (year%400 == 0) or (year%4 == 0 and year%100 != 0):
    for i in range(1,month):
        j = b[i-1]
        k+=j
else:
    for i in range(1,month):
        j = a[i-1]
        k+=j
print(k+day)

3.思路

这道题的话,首先我考虑的就是是否是闰年问题,怎样判断闰年呢,大家记住就行了:(year%400 == 0) or (year%4 == 0 and year%100 != 0),这是判断方法,要牢记于心!
因为闰年的问题月份不同,自然而然想到的是创建两个列表来存储每月的天数,根据是否是闰年,来分别遍历两个不同的列表。因为列表中我们存储的本身就是整数了,所以说我们只需要把需要的数据一次从1月开始遍历出来相加就可以了,还是比较好想的,注意列表索引是0,月份从1开始遍历的,要让变量在获取列表索引时,大小减1,从0开始。
然后设置一个全局变量k来存储和,不要用遍历的j作为这个变量来依次相加求和,j在这个j = a[i-1]赋值的地方,大小是会发生变化的!

第五题

1.题目

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

2.代码1

a= int(input('第一个数:'))
b = int(input('第二个数:'))
c = int(input('第三个数:'))
d = 0
if a > b:
    d = a
    a = b
    b = d
    if a > c:
        d = a
        a = c
        c = d
        if b > c:
            d = b
            b = c
            c = d
elif a > c:
    d = a
    a = c
    c = d
    if b > c:
        d = b
        b = c
        c = d
print(a,b,c)

3.思路

排序三个数,从小到大依次输出。我首先想到的便是两两比较方法,先用1和2还有1和3进行比较,将1的位置上放入最小的数,然后2和3再进行比较,让两者中的小者作为2的位置,最后依次输出1 2 3, 即从小到大进行输出!
说实话,这是最简单的方法同时也是最愚蠢的方法,最简单是因为这是最容易想的也是最不用动脑子的方法;最愚蠢是因为这种方法实在是太呆了,一一比较,效率很低,高级一点的话可以用冒泡排序,但是这道题用冒泡的话确实就有点大题小做了!我们其实可以借助列表中的sort()函数来排序,俗称耍流氓!
代码如下:简单又容易理解!

4.代码2

list = []
for i in range(3):
    a = int(input('请输入数字:'))
    list.append(a)
list.sort()
print(list)

第六题

1.题目

6.斐波那契数列
斐波那契数列(Fibonacci sequence),又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……。

2.代码

def feibonaji(n):
    if n==1:
        return 0
    elif n==2:
        return 1
    else:
        return feibonaji(n-1)+feibonaji(n-2)
print(feibonaji(8))

3.思路

这道题应该是学递归函数的时候都要做的一道题,很基础也很全面吧。理解起来并不是很容易。递归方法:前两项的和相加等于自身的值,n=1时为0,n=2时为1,n=3时,值为1+0=1,以此类推,得到相应的数据的值。

第七题

1.题目

7.将一个列表的数据复制到另一个列表中

2.代码1

a = [1,2,3,4.5]
b = []
for i in a:
    b.append(i)
print(b)

3.思路1

代码1的话,应该是大多数人的思路,很简单不是要复制一下列表a嘛,那我就把列表a挨着遍历一遍,把遍历完的数放在b里面,构成一个新的列表。当然按照这个来的话,自然而然就会想到列表生成器

4.代码2

# 列表生成式
a= [1,2,3]
b = [i for i in a]
print(b)

5.思路2

列表生成器的话其实跟思路一其实是差不多的,就是创建列表和元素添加直接一步走了,更加简单明确!

6.代码3

a = [1,2,3,4,5]
b = a[::1]
print(b)

7.思路3

其实更简单的一种方法便是利用列表切片原理,直接全部切片,简单又方便!直接用b = a[::]默认从头按顺序切到尾,重新复制一遍,但这还不是最简单的方法哟~

8.代码4

a = [1,2,3,4,5]
b = a.copy()
print(b)

9.思路4

使用copy函数,将列表a重新复制一遍,得到一个新列表,方便又好用,copy函数学习起来吧!

第八题

1.题目

9.输出 9*9 乘法口诀表。

2.代码

for i in range(1,10):
    for j in range(1,i+1):
        print(j,'*',i,'=',i*j,end='\t')
    print()

3.思路

这是初学循环都会打印的一个9*9乘法表,很基础但你不一定可以正确输出!运用到了两个循环结构,end = ''相当于让它不要在一个循环中换行输出。然后换行print()相当于结束第一个循环后换行打印下一个循环。也可以用格式化字符串进行输出,这样会更简单:print('%d*%d=%d' % (i, j, i*j), end=' ')

第九题

1.题目

9.暂停一秒输出。

2.代码

# 9.暂停一秒输出。
# 使用 time 模块的 sleep() 函数。
import time
for i in range(5):
    print(i)
    time.sleep(1)

3.思路

使用 time 模块的 sleep() 函数,定义睡眠时间!

第十题

1.题目

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

2.代码

import time
 
print (time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))
 
# 暂停一秒
time.sleep(1)
 
print (time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))

3.思路

这个没啥好说的,time模块strftime()函数输出当前时间,参数有点多,背吧!

结语:第一期圆满结束,我们第二期再见!!!加油坚持下去!!!

🌲🌲🌲 好啦,这就是今天要分享给大家的全部内容了

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
分享一道用Python基础+蒙特卡洛算法实现排列组合的题目(附源码)
Hadoop学习之路(一)理论基础和逻辑思维
微软公司等数据结构+算法面试100题
奇数还是偶数?要是分不清,请来试一试!
难度不大的二次函数压轴题,慢慢积累思路,才可以突破复杂题目
算法57(数组中超过出现次数超过一半的数字)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服