python考试复习二(简单编程题)

以下所有的代码均可运行,可供大家借鉴,如有可以改进的地方,欢迎留言私信
1.编程打出所有水仙花数

  • 解题思路:打印出所有的“水仙花数”。 所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。把任意三位数的百位、十位、个位拆解出来判断和是否等于其本身
  • 此题对于初学者或者可爱的小仙女来说都有一个饶人的地方,就是怎么拆解各位、十位、百位。不顾不用担心,玥玥已经帮你们在代码中详细的注释了,仔细阅读注释理解他们就好啦,实在理解不了,就记住吧,毕竟考试的时候还是可以有点用的。
for i in range(100, 1000):#水仙花是三位数,所以限制范围在100~1000之间
    ge = i % 10 #个位数可以通过除以10得到的余数就是个位数
    shi = i // 10 % 10 #从左往右,先把个位数字去掉,再取余
    bai = i // 100  #直接取百位
    if ge ** 3 + shi ** 3 + bai ** 3 == i: #将三次方都想加
        print(i) #输出水仙花数

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

  • 这题可以有很多种思路,但是我不太想用到包之类的,就最傻瓜式的写出代码,清晰明了易懂

  • x,y,z比较大小由于只有三个元素,所以可以直接组合比大小,直接输出,但我的代码只限于此题,如果想要研究n个数字比大小,可以自行搜索。

x = int(input("请输入第一个整数x:"))#按题目要求输入数据
y = int(input("请输入第二个整数y:"))#按题目要求输入数据
z = int(input("请输入第三个整数z:"))#按题目要求输入数据
#x,y,z比较大小有六种情况,直接傻瓜式的列出就好啦!
if x < y < z:
    print(x, y, z)
if x < z < y:
    print(x, z, y)
if y < x < z:
    print(y, x, z)
if y < z < x:
    print(y, z, x)
if z < x < y:
    print(z, x, y)
if z < y < x:
    print(z, y, x)

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

list1 = [10, 20, 30, 40, 50]#创建一个列表list1
list2 = []#创建一个空列表list2

for i in list1:
    list2 = list1#直接复制
print(list2)#输出list2

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

  • 该题需要用到Python中的time库,下面是此题需要用到的一些方法介绍
  • time.sleep() 将时间延迟一秒后输出,和此题要求的暂停一秒意思一致,你也可以延迟n秒,根据不同的题目要求
  • time strftime() 函数接收以时间元组,并返回以可读字符串表示的当地时间
  • %Y  年份(以四位数来表示)大写
  • %m  月份(以01-12来表示)小写
  • %d  日期(以01-31来表示)小写
  • %H  小时(以00-23来表示)大写
  • %M  分钟(以00-59来表示)大写
  • %S 秒(以00-59来表示)大写
  • 一定要注意大小写!!!!!否则程序会报错,含义也是不一样的。年份,时分秒都是大写,月份,日是小写!记住呀!!!
import time  # 引入time模块

time.sleep(1)  # 延迟1秒打印
print(time.strftime('%Y-%m-%d %H:%M:%S'))  # 格式化打印当前时间

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

  • 解题思路很简单,就题论题。先从range()中得到数字,再判断所得到的数字是否重复,不重复的话就进行拼接,最后循环输出结果。
  • 此题也可以用其他的方法来解,这里的方法仅仅是为了应付考试,还是希望大家可以去学习更智能化的方法。
count = 0 #定义一个变量用来计数
for i in range(1, 5):#i从1到4中取数,不包括5
    for j in range(1, 5):#j从1到4中取数,不包括5
        for k in range(1, 5):#k从1到4中取数,不包括5
            if (i != k) and (i != j) and (j != k):#当i,j,k三个数字都不相等的时候就把他们拼接在一起
                print((str(i) + str(j) + str(k)), end=' ')#强制转换成字符为了拼接输出,end=' '是为了不让他换行
                count += 1#一次循环结束,计数加一

print('一共可以组成%d个三位数' %count)#输出一共多少数字

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

  • 根据题目意思写代码即可,这里要用到开根号的方法sqrt(),从math函数库中导入即可
from math import sqrt  # 从math库中导入sqrt方法,用来开根号

for i in range(0, 1000000):  # 从0开始到100 0000
    a = sqrt(i + 100)  # 加上一百后开根号
    b = sqrt(i + 268)  # 加上268后开根号,因为题目要求再加上168
    if (a == int(a)) and (b == int(b)):  # 判断开根号后是否还是整数
        print(i)#输出满足条件的数字

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

  • 这题就仔细阅读我代码里的注释吧,可能代码写得没有那些大神厉害,但我只能说还是经过精心设计修改的,而且可以运行
y = int(input("请输入年:"))  # 输入年
m = int(input("请输入月:"))  # 输入月
d = int(input("请输入日:"))  # 输入日
s_day = 0  # 总天数


# 函数 判断是否为闰年:闰年有两种形式1.能被4整除但不能被100整除 2.能被400整除
def checkYear(a):
    return ((a % 4 == 0 and a % 100 != 0) or a % 400 == 0)  # 如果是闰年,返回值则为true


ms = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]  # 定义一个列表,用来储存一般情况下的月份天数

if checkYear(y):  # 判断输入的年份是否为闰年
    ms[2] += 1  # 如果是闰年,则2月份的天数加1

for i in range(0, m):  # 遍历新得到的列表,范围是从第一月到第m-1个月,因为第m月还没有过完,range(m)等价于range(0:m)
    s_day += ms[i]  # 不断加给总天数,得到m-1个月一种有多少天
print(s_day + d)  # 最后加上天数就得到最终的总天数啦

8.有一个已经安排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。

a = [10, 12, 15, 100]#定义一个有序数组
x = int(input('请输入一个数字:'))#输入要插入的数字,此数字要比100小
for i in range(len(a)+1):#在数组a中遍历
    if a[i] > x:#如果发现有a[i]>x
        break#终止if语句
b = a[:i]+[x]+a[i:]#把列表从i处断开,分为三部分,前部为a[0]~a[i-1],中部为[x],后部为a[i]~a[-1],最后拼接在一起
print(b)

9.编写一个函数计算斐波那契数列

  • 斐波那契数列:斐波那契数列指的是这样一个数列:1、1、2、3、5、8、13、21、34、……这个数列从第3项开始,每一项都等于前两项之和。在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)
# 定义斐波那契函数
def fib(n):
    if n == 1:
        print([1])  # 当要求有一项的斐波那契数列时返回数列[1]
    if n == 2:
        print([1, 1])  # 当要求有两项的斐波那契数列时返回数列[1,1]
    fibs = [1, 1]
    for i in range(2, n):  # 从第三项往后开始
        fibs.append(fibs[-1] + fibs[-2])  # 斐波那契数列的最后一项等于已有的最后一项加上倒数第二项,直至输出n项斐波那契数列
    print(fibs)  # 输出数列


# 输出前10个斐波那契数列
fib(10)  # 调用函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值