【Python】基础练习题_ 函数和代码复用_1

函数和代码复用练习题

(1)编写程序,通过调用函数,能够打印出n行n列的方格矩阵。(例如,4行4列的方格矩阵如下图所示。)

def fn():
    print('+--+--+--+--+')
    print('|  |  |  |  |')
    print('+--|--+--+--+')
    print('|  |  |  |  |')
    print('+--+--+--+--+')
    print('|  |  |  |  |')
    print('+--+--+--+--+')
    print('|  |  |  |  |')
    print('+--+--+--+--+')
fn()

(2)使用函数绘制满天星(100颗)。

import turtle
import random
def fn():
    # 设置画笔速度
    turtle.speed(0)
    # 设置画笔的宽度
    turtle.width(3)
    # 设置画布背景颜色为黑色
    turtle.bgcolor("black")
    # 循环绘制100颗五角星
    for _ in range(100):
        # 生成随机的五角星颜色
        r = random.random()
        g = random.random()
        b = random.random()
        color = (r, g, b)
        # 设置画笔颜色为随机颜色
        turtle.color(color)
        # 随机生成五角星的大小和位置
        size = 10
        x = random.randint(-400, 400)
        y = random.randint(-400, 400)
        # 将画笔移动到指定位置
        turtle.penup()
        turtle.goto(x, y)
        turtle.pendown()
        # 绘制五角星
        turtle.begin_fill()
        for _ in range(5):
            turtle.forward(size)
            turtle.right(144)
        turtle.end_fill()
    # 隐藏画笔
    turtle.hideturtle()
    # 等待用户关闭窗口
    turtle.done()
fn()

(3)实现isNum()函数,参数为一个字符串,如果这个字符串属于整数、浮点数或复数的表示,则返回True,否则返回False。

def isNum(s):
    try:
        complex(s)  # 尝试将字符串转换为复数类型
        return True
    except ValueError:
        try:
            float(s)  # 尝试将字符串转换为浮点数类型
            return True
        except ValueError:
            try:
                int(s)  # 尝试将字符串转换为整数类型
                return True
            except ValueError:
                return False

# 测试
print(isNum("123"))  # True
print(isNum("3.14"))  # True
print(isNum("1+2j"))  # True
print(isNum("abc"))  # False

(4)定义一个判别素数的函数,在主程序或者main函数中输入一个整数(要有异常处理),程序输出该数是否素数的判定消息。
说明:本程序测试数据:17、88、2、1、0、a。分别运行结果是否正确。
1)输入程序,调试和运行程序,分析结果。
2)保留判别素数的函数,修改主程序或者main函数,要求实现输出100~200之间的素数。

import math
def isPrime(num):
    if num < 2:
        return False
    for i in range(2, int(math.sqrt(num)) + 1):
        if num % i == 0:
            return False
    return True
def fn(start, end):
    for i in range(start, end +1):
        try:
            if(isPrime((i))):
                print(i)

        except ValueError:
            print("输入错误:输入必须为大于1的整数")

# def fun():
#     try:
#         num = int(input("请输入一个整数:"))
#         if not isinstance(num, int) or num <= 1:
#             raise ValueError
#     except ValueError:
#         print("输入错误:输入必须为大于1的整数")
#     else:
#         if isPrime(num):
#             print(f"{num}是素数")
#         else:
#             print(f"{num}不是素数")

fn(100, 200)

(5)哥德巴赫猜想。1742年,哥德巴赫给欧拉的信中提出了以下猜想"任一大于2的整数都可写成三个质数之和”。常见的猜想陈述为欧拉的版本,即任一大于2的偶数都可写成两个素数之和,亦称为”强哥德巴赫猜想”或”关于偶数的哥德巴赫猜想”。比如: 24=5+19,其中5和19都是素数。
要求:输入一个正整数N,当输入为偶数时,分行按照格式“N = p + q”输出N的所有素数分解,其中p、q均为素数且p ≤ q。当输入为奇数或N<4时,输出’Data error!’ 。
测试示例 输入 输出
示例1 88 88=5+83
88=17+71
88=29+59
88=41+47
4 4=2+2
101 Data error!

def is_prime(n):
    if n < 2:
        return False
    for i in range(2, int(n**0.5) + 1):
        if n % i == 0:
            return False
    return True

def goldbach_conjecture(n):
    if n < 4 or n % 2 != 0:
        return 'Data error!'

    results = []
    for p in range(2, n//2 + 1):
        q = n - p
        if is_prime(p) and is_prime(q):
            results.append((p, q))

    return results

# 测试
n = int(input("请输入一个正整数N:"))
results = goldbach_conjecture(n)
if type(results) == str:
    print(results)
else:
    for result in results:
        print("{} = {} + {}".format(n, result[0], result[1]))

你可能感兴趣的:(Python,python,开发语言)