python练习题(持续更新中)

目录

1.99乘法表

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

3.输出斐波那契数列

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

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

6.古典问题:兔子总数

7. 1, 2, 3, 4几个数字,可以组成多少个互不相同且无重复数字的三位数

8.用户输入三个数并进行排序

9. 判断101-200之间有多少个素数,并输出所有素数

10.打印出所有的"水仙花数"

1.99乘法表

for i in range(1, 10):
    for j in range(1, i+1):
        print("%d*%d=%-3d " % (i, j, i*j), end=' ')
    print("\n")

"""
print("%2d*%2d=%2d " % (i, j, i*j), end=' ')
结果显示
 1* 1= 1  

 2* 1= 2   2* 2= 4  

 3* 1= 3   3* 2= 6   3* 3= 9  

 4* 1= 4   4* 2= 8   4* 3=12   4* 4=16  

 5* 1= 5   5* 2=10   5* 3=15   5* 4=20   5* 5=25  

 6* 1= 6   6* 2=12   6* 3=18   6* 4=24   6* 5=30   6* 6=36  

 7* 1= 7   7* 2=14   7* 3=21   7* 4=28   7* 5=35   7* 6=42   7* 7=49  

 8* 1= 8   8* 2=16   8* 3=24   8* 4=32   8* 5=40   8* 6=48   8* 7=56   8* 8=64  

 9* 1= 9   9* 2=18   9* 3=27   9* 4=36   9* 5=45   9* 6=54   9* 7=63   9* 8=72   9* 9=81 
 
 
 对齐方式奇怪,可改为
 print("%d*%d=%-3d " % (i, j, i*j), end=' ')

1*1=1    

2*1=2    2*2=4    

3*1=3    3*2=6    3*3=9    

4*1=4    4*2=8    4*3=12   4*4=16   

5*1=5    5*2=10   5*3=15   5*4=20   5*5=25   

6*1=6    6*2=12   6*3=18   6*4=24   6*5=30   6*6=36   

7*1=7    7*2=14   7*3=21   7*4=28   7*5=35   7*6=42   7*7=49   

8*1=8    8*2=16   8*3=24   8*4=32   8*5=40   8*6=48   8*7=56   8*8=64   

9*1=9    9*2=18   9*3=27   9*4=36   9*5=45   9*6=54   9*7=63   9*8=72   9*9=81   
"""

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


year = int(input("请输入年份: "))
month = int(input("请输入月份: "))
day = int(input("请输入天: "))
sum = 0
months = (0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334)
# 先判断输入的月份是否合理
if 0 < month <= 12:
    sum += months[month - 1]
else:
    print("月份输入错误")
sum += day
# 判断年份是平年还是闰年,能被4或400、100整除的年份为闰年,月份大于2月才需要加一
if (year % 4 == 0) or ((year % 400 == 0) and (year % 100 == 0)) and (month > 2):
    sum += 1
print("您输入的日期为%d年的第%d天" % (year, sum))


3.输出斐波那契数列


斐波那契数列,又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……
这个数列从第三项开始,每一项都等于前两项之和。 
在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)

# 方法1:利用数值交换的思想
a = 1
b = 0
c = 0
for i in range(11):
    print("%5d " % c, end=' ')
    c = a + b
    a = b
    b = c
print("\n")


# 方法2: 利用python特有的数值交换方式
def fib2(n):
    m, k = 1, 1
    for i in range(n - 1):
        m, k = k, m + k
    return m


# 输出了第10个斐波那契数列
print(fib2(10))
print("\n")


# 方法3:使用递归调用,递归调用两大特点为1)自己调用自己;2)有条件,否则易死循环(该程序为n)
def fib3(n):
    if n == 1 or n == 2:
        return 1
    return fib3(n - 1) + fib3(n - 2)


# 输出了第10个斐波那契数列
print(fib3(10))
print("\n")


# 方法4
def fib4(n):
    if n == 1:
        return [1]
    if n == 2:
        return [1, 1]
    fibs = [1, 1]
    for i in range(2, n):
        fibs.append(fibs[-1] + fibs[-2])
    return fibs


# 输出前 10 个斐波那契数列
print(fib4(10))


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


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


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


import time
# 方法1
L = [1, 2, 3]
for i in range(len(L)):
    print(L[i])
    time.sleep(1)
    print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())))  # 格式化输出当前时间
# 方法2
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())))

补充:
#取得当前时间戳
import time
print(time.time())
#格式化时间戳为标准格式,用time.localtime()方法,作用是格式化时间戳为本地的时间,用time.strftime()方法,把刚才的一大串信息格式化。
print(time.strftime('%Y.%m.%d',time.localtime(time.time())))
#获取30天前的时间(通过加减秒数来获取现在或者未来某个时间点)
print(time.strftime('%Y.%m.%d',time.localtime(time.time()-2592000)))

6.古典问题:兔子总数

有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
f1 = 1
f2 = 1
for i in range(1, 22):
    print('%12ld %12ld' % (f1, f2), end=' ')
    if (i % 3) == 0:
        print('')
    f1 = f1 + f2
    f2 = f1 + f2

7. 1, 2, 3, 4几个数字,可以组成多少个互不相同且无重复数字的三位数


#方法1
count_num = 0
for i in range(1, 5):
    for j in range(1, 5):
        for k in range(1, 5):
            if (i != j) and (i != k) and (j != k):
                count_num += 1
                # print(i, j, k)
print(count_num)

#方法2
count_num1 = 0
num_list = [3, 5, 7, 9]  #可用于随机数
for i in num_list:
    for j in num_list:
        for k in num_list:
            if (i != j) and (i != k) and (j != k):
                count_num1 += 1
                # print(i, j, k)
print(count_num1)

8.用户输入三个数并进行排序

I = []
for i in range(3):
    x = int(input('integer:\n'))
    I.append(x)
I.sort()
print(I)

9. 判断101-200之间有多少个素数,并输出所有素数

n = 0
for i in range(101, 201):
    for j in range(2, i):
        if (i % j == 0) and (j < i):
            m = 0
            break
        else:
            m = 1
    if m == 1:
        n += 1
        print(i)
print("101到200之间素数有%d个" % n)

"""
有问题代码:
n = 0
for i in range(101, 201):
    for j in range(2, i):
        if (i % j == 0) and (j < i):
            break
        else:
            n += 1
            print(i)    
print("101到200之间素数有%d个" % n)

原因分析
在循环中执行 n += 1 ,会使得i值重复多次判断并输出
"""

10.打印出所有的"水仙花数"

所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。
# 例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
import math
for n in range(100, 1000):
    i = n // 100
    j = (n - (i * 100)) // 10
    k = n % 10
    if n == pow(i, 3) + pow(j, 3) + pow(k, 3):
        print(n)
"""
//  地板除法(向下取整除),它会返回整除结果的整数部分,取整
%   取模运算,返回除法的余数,取余
pow()  求取数值的多少次方
"""

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值