Python学习笔记(六)算法练习

这篇博客记录了Python学习过程中的算法练习,包括9*9乘法口诀表、斐波那契数列、日期判断、暂停输出、完数检测、菱形图案绘制、随机数生成、三角形绘制、字符串查找、椭圆绘制、八进制转十进制、子串计数、列表转字典及杨辉三角形等实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 输出 9*9 乘法口诀表。
代码如下:

for i in range(1, 10):
    print("")
    for j in range(1, i+1):
        print("%d*%d=%d" % (j, i, i * j) + " ", end="")

效果如下:

1*1=1 
1*2=2 2*2=4 
1*3=3 2*3=6 3*3=9 
1*4=4 2*4=8 3*4=12 4*4=16 
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81

2. 斐波那契数列

def fib(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(fib(10))

结果为:

[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]

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

year = int(input('year: '))
month = int(input('month: '))
day = int(input('day: '))

months = (0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334)
if 0 < month <= 12:
    sum = months[month - 1]
else:
    print('data error')
sum += day
leap = 0
if (year % 400 == 0) or ((year % 4 == 0) and (year % 100 != 0)):
    leap = 1
if (leap == 1) and (month > 2):
    sum += 1
print('it is the %dth day.' % sum)

4. 暂停一秒输出

import time

myD = {1: 'a', 2: 'b'}
for key, value in dict.items(myD):
    print(key, value)
    time.sleep(1)
    # 暂停 1 秒

5. 一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。

from sys import stdout

for j in range(2, 1001):
    k = []
    n = -1
    s = j
    for i in range(1, j):
        if j % i == 0:
            n += 1
            s -= i
            k.append(i)

    if s == 0:
        print(j)
        for i in range(n):
            stdout.write(str(k[i]))
            stdout.write(' ')
        print(k[n])

6. 打印出如下图案(菱形):

   *
  ***
 *****
*******
 *****
  ***
   *

代码如下:

 from sys import stdout

for i in range(4):
    for j in range(2 - i + 1):
        stdout.write(' ')
    for k in range(2 * i + 1):
        stdout.write('*')
    print("")

for i in range(3):
    for j in range(i + 1):
        stdout.write(' ')
    for k in range(4 - 2 * i + 1):
        stdout.write('*')
    print("")

7. 输出一个随机数

import random

#生成 10 到 20 之间的随机数
print(random.uniform(10, 20))

8. 绘制一个三角形

from tkinter import *
    
    
    canvas = Canvas(width=500, height=500, bg='green')
    canvas.pack(expand=YES, fill=BOTH)
    canvas.create_line(50, 150, 450, 150, width='5', fill='red')
    canvas.create_line(50, 150, 250, 450, width='5', fill='red')
    canvas.create_line(250, 450, 450, 150, width='5', fill='red')
    mainloop()

9. 查找字符串

        str1 = 'abcdefg'
        str2 = 'cde'
        print(str1.find(str2))

10. 画椭圆

 if __name__ == '__main__':
        from tkinter import *
    
        x = 360
        y = 160
        top = y - 30
        bottom = y - 30
    
        canvas = Canvas(width=400, height=600, bg='white')
        for i in range(20):
            canvas.create_oval(250 - top, 250 - bottom, 250 + top, 250 + bottom)
            top -= 5
            bottom += 5
        canvas.pack()
        mainloop()

11. 八进制转10进制

 if __name__ == '__main__':
        n = 0
        p = input('input a octal number:\n')
        for i in range(len(p)):
            n = n * 8 + ord(p[i]) - ord('0')
        print(n)

12. 计算字符串中子串出现地次数

    if __name__ == '__main__':
        str1 = input('请输入一个字符串:\n')
        str2 = input('请输入一个子字符串:\n')
        n_count = str1.count(str2)
        print(n_count)

13. 列表转换为字典

    i = ['name', 'keven']
    j = ['age', '22']
    print(dict([i, j]))

14. 打印出杨辉三角形(要求打印出10行)

if __name__ == '__main__':
    a = []
    for i in range(10):
        a.append([])
        for j in range(10):
            a[i].append(0)
    for i in range(10):
        a[i][0] = 1
        a[i][i] = 1
    for i in range(2, 10):
        for j in range(1, i):
            a[i][j] = a[i - 1][j - 1] + a[i - 1][j]
    from sys import stdout

    for i in range(10):
        for j in range(i + 1):
            stdout.write(str(a[i][j]))
            stdout.write(' ')
        print("")

如图:

1 
1 1 
1 2 1 
1 3 3 1 
1 4 6 4 1 
1 5 10 10 5 1 
1 6 15 20 15 6 1 
1 7 21 35 35 21 7 1 
1 8 28 56 70 56 28 8 1 
1 9 36 84 126 126 84 36 9 1 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值