Python程序设计基础——代码习题

news2025/1/11 3:58:31

1 __name__属性

import demo

def main():
    if __name__ == '__main__':
        print('这个程序被直接运行。')
    elif __name__=='demo':
        print('这个程序作为模块被使用。')
main()

在这里插入图片描述

3.3 编写程序,生成包含1000个0~100之间的随机整数,并统计每个元素出现的次数。

import random

x=[random.randint(0,100) for i in range(1000)]

# 使用集合
s=set(x)
for v in s:
    print(v,':',x.count(v))
print('='*30)

# 使用字典
d=dict()
for v in x:
    d[v]=d.get(v,0)+1
for k,v in d.items():
    print(k,v,sep=':')

3.4 编写程序,用户输入一个列表和两个整数作为下标,然后使用切片获取并输出列表中介于两个下标之间的元素组成的子列表。例如,用户输入[1,2,3,4,5,6]和2、5,程序输出[3,4,5,6]。

x=eval(input('请输入一个列表:'))
start,end=eval(input('请输入开始位置:')),eval(input('请输入结束位置:'))
print(x[start:end+1])

4.5 编写程序,生成一个包含20个随机整数的列表,然后对其中偶数下标的元素进行降序排列,奇数下标的元素不变。

import random
x=[random.randint(0,100) for i in range(20)]
print(x)
x[::2]=sorted(x[::2],reverse=True) # 只对偶数下标降序排列
print(x)

4.6 编写程序,用户从键盘输入小于1000的整数,对其进行因式分解。例如10=2×5,60=2×2×3×5。

x = eval(input('请输入一个小于1000的整数:'))  # 获取用户输入的整数

t = x  # 将输入的整数赋值给变量t
i = 2  # 从最小的质数2开始尝试除法
result = []  # 存储质因数的列表

while True:
    if t == 1:  # 如果t已经被分解完毕,则跳出循环
        break
    if t % i == 0:  # 如果t能够整除当前的质数i,则i是t的一个质因数
        result.append(i)  # 将i添加到结果列表中
        t = t // i  # 将t除以i,继续判断是否还能整除
    else:
        i += 1  # 如果不能整除,则尝试下一个更大的质数

print(x, '=', '*'.join(map(str, result)))  # 输出质因数分解的结果

4.7 编写程序,至少使用两种不同的方法计算100以内所有奇数的和。

print(sum([i for i in range(1,100) if i%2==1]))
print(sum(range(1,100)[::2]))

4.8 编写程序,输出所有由1,2,3,4这四个数字组成的素数,并且在每个素数中每个数字只使用一次。

import itertools

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

digits = [1, 2, 3, 4]  # 数字列表

# 生成由给定数字列表中的数字组成的所有排列
permutations = list(itertools.permutations(digits))

# 使用列表推导式,在每个排列中判断是否为素数,并将满足条件的素数转换为整数添加到一个新的列表中
prime_numbers = [int(''.join(map(str, perm))) for perm in permutations if is_prime(int(''.join(map(str, perm))))]

print(prime_numbers)  # [1423, 2143, 2341, 4231]

4.9 编写程序,实现分段函数计算

x=eval(input('请输入x:'))

if 0 <= x < 5:
    print(x)
elif 5 <= x < 10:
    print(x * 3 - 5) 
elif 10 <= x < 20:
    print(x * 0.5 - 2)
else:
    print(0)

5.2 编写函数,判断一个整数是否为素数,并编写主程序调用该函数

import math

def isPrime(v):
    n=int(math.sqrt(v)+1)
    for i in range(2,n):
        if v%i==0:
            return 'No'
    return 'Yes'

print(isPrime(37))
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

# 主程序
num = int(input("请输入一个整数:"))
if is_prime(num):
    print(f"{num} 是素数")
else:
    print(f"{num} 不是素数")

5.3 编写函数,接收一个字符串,分别统计大写字母、小写字母、数字、其他字符的个数,并以元组的形式返回结果。

def count(v):
    capital = little = digit = other = 0
    for i in v:
        if 'A'<=i<='Z':
            capital += 1
        elif 'a' <=i <='z':
            little += 1
        elif '0' <=i <='9':
            digit += 1
        else:
            other += 1
    return (capital,little,digit,other)

# 主程序
input_string = input("请输入一个字符串:")
result = count(input_string)
print(result)

5.8 编写函数,可以接收任意多个整数并输出其中的最大值和所有整数之和。

def demo(*v):
    print(v)
    print(max(v))
    print(sum(v))

demo(1,2,3)

5.9 编写函数,模拟内置函数sum()。

def Sum(v):
    s=0
    for i in v:
        s += i
    return s

x=[1,2,3,4,5]
print(Sum(x))
x=(1,2,3,4,5)
print(Sum(x))

5.11 编写函数,模拟内置函数sorted()。

from random import randint

def mySorted(lst, reverse=False):
    lst = lst[:]  # 复制原始列表,避免修改原始列表
    for i in range(0, len(lst)):
        flag = False  # 标记是否发生元素交换
        for j in range(0, len(lst) - i - 1):
            # 比较相邻两个元素大小,并根据需要进行交换,默认升序
            exp = 'lst[j] > lst[j+1]'
            # 若reverse=True,则降序排列
            if reverse:
                exp = 'lst[j] < lst[j+1]'
            if eval(exp):  # 利用eval()函数动态求值表达式
                lst[j], lst[j+1] = lst[j+1], lst[j]
                # flag=True表示本次扫描发生过元素交换
                flag = True
        # 若一次扫描结束后,没有发生过元素交换,说明已经按序排列
        if not flag:
            break
    return lst

# 示例使用
nums = [randint(1, 100) for _ in range(10)]  # 生成随机整数列表
print("原始列表:", nums)
sorted_nums = mySorted(nums)  # 默认升序排序
print("升序排序结果:", sorted_nums)
reverse_sorted_nums = mySorted(nums, reverse=True)  # 降序排序
print("降序排序结果:", reverse_sorted_nums)

5.12 编写函数,模拟内置函数reversed()。

def myReversed(lst):
    for item in lst[::-1]:
        yield item

lst = list(range(5))
for i in myReversed(lst):
    print(i)

6.1 继承6.3节例6-1中的Person类生成Student类,填写新的方法用来设置学生专业,然后生成该类对象并显示信息。

# 基类(父类)
class Person(object): # 基类必须继承于object,否则在派生类中将无法使用super()函数
    def __init__(self, name='',age=20,sex='man'):
        # 通过调用方法进行初始化,这样可以对参数进行更好控制
        self.setName(name)
        self.setAge(age)
        self.setSex(sex)

    def setName(self,name):
        if not isinstance(name,str):# 检查name是否为字符串类型
            print('名字必须是字符串!')
            return
        self.__name = name

    def setAge(self,age):
        if not isinstance(age,int):
            print('年龄必须是整数!')
            return
        self.__age = age

    def setSex(self,sex):
        if sex != '男' and sex !='女':
            print('性别必须输入男或女!')
            return
        self.__sex = sex

    def show(self):
        print(self.__name)
        print(self.__age)
        print(self.__sex)

# 派生类(子类)
class Student(Person):
    def __init__(self,name='',age=30,sex='男',major='计算机'):
        # 调用基类构造方法初始化基类的私有数据成员
        super(Student, self).__init__(name,age,sex)
        # 初始化派生类的数据成员
        self.setMajor(major)
    def setMajor(self,major):
        if not isinstance(major,str):
            print('专业必须是字符串类型!')
            return
        self._major = major
    def show(self):
        super(Student,self).show()
        print(self._major)

if __name__=='__main__':
    # 创建父类对象
    lesin = Person('lesin',18,'女')
    lesin.show()
    print('='*30)
    # 创建子类对象
    esin = Student('esin',17,'女','数学')
    esin.show()
    # 调用集成的方法修改专业
    esin.setMajor('计算机科学与技术')
    esin.show()

6.2 设计一个三维向量类,并实现向量的加法、减法以及向量与标量的乘法和除法运算。

class Vecter3:
    def __init__(self,x=0,y=0,z=0):
        self.X=x
        self.Y=y
        self.Z=z

    def __add__(self,n):
        r =Vecter3()
        r.X = self.X + n.X
        r.Y = self.Y + n.Y
        r.Z = self.Z + n.Z
        return r

    def __sub__(self, n):
        r =Vecter3()
        r.X = self.X - n.X
        r.Y = self.Y - n.Y
        r.Z = self.Z - n.Z
        return r

    def __mul__(self, n):
        r =Vecter3()
        r.X = self.X * n
        r.Y = self.Y * n
        r.Z = self.Z * n
        return r

    def __truediv__(self, n):
        r =Vecter3()
        r.X = self.X / n
        r.Y = self.Y / n
        r.Z = self.Z / n
        return r

    def __floordiv__(self, n):
        r =Vecter3()
        r.X = self.X // n
        r.Y = self.Y // n
        r.Z = self.Z // n
        return r

    def show(self):
        print((self.X,self.Y,self.Z))

v1 = Vecter3(1,2,3)
v2 = Vecter3(4,5,6)
v3 = v1 + v2
v3.show()

7.1 假设有一段英文,其中有单独的字母I误写为i,请编写程序进行修正。

x='i am a student,i am 18 years old.'
x=x.replace('i','I')
print(x)

7.2 假设有一段英文,其中有单词中间的字母i误写为I,请编写程序进行纠正。

text = 'If the implementatIon is hard to explain, it;s a bad idea.'
result = ''

# 遍历文本中的每个字符及其索引
for index, ch in enumerate(text):
    # 如果当前字符是大写的"I",并且它前面和后面的字符都是字母
    if ch == 'I' and text[index-1].isalpha() and text[index+1].isalpha():
        ch = 'i'  # 将大写的"I"替换为小写的"i"
    result += ch

print(result)

8.1 有一段英文文本,其中有个单词连续重复了2次,编写程序检查重复的单词,并只保留一个。例如,文本内容为"This is is a desk.“,程序输出为"This is a desk.”

import re
'''
(\w+):表示一个或多个连续的字母数字字符,被捕获到第一个分组中。
\s:表示一个空白字符(包括空格、制表符等)。
\1:表示对第一个分组的引用,即前面捕获到的单词。
通过调用 re.sub() 函数,将匹配到的重复的单词替换为第一个出现的单词。
'''
x = 'This is is a desk.'
x = re.sub(r'(\w+)\s\1',r'\1',x)
print(x)

8.2 编写程序,用户输入一段英文,然后输出这段英文中所有长度为3个字母的单词。

import re
'''
re.compile() 函数创建一个正则表达式模式对象。

\b 表示单词的边界,确保匹配的是完整的单词。
[a-zA-Z] 表示匹配任意一个字母(大小写不限)。
{3} 表示前面的表达式重复匹配3次,即匹配长度为3的单词。

调用 pattern.findall(x) 方法来查找并返回输入字符串 x 中满足匹配模式的所有结果。
'''
x = input('请输入一段英文:')
pattern = re.compile(r'\b[a-zA-Z]{3}\b')
print(pattern.findall(x))

9.1 假设有一个英文文本文件,编写程序获取其内容,并将其中的大写字母变为小写字母,小写字母变为大写字母。

with open(r'd:\test.txt', 'r') as src: # 打开D盘下的test.txt文件
    for line in src:  # 逐行读取文件内容
        print(line.swapcase())  # 对每一行的字符串进行大小写转换并打印输出

9.2 编写程序,使用pickle模块将包含学生成绩的字典保存为二进制文件,然后读取内容并显示。

import pickle

score = {'lesin': 150, 'Bob': 73, 'esin': 97}

with open('score.dat', 'wb') as fp:
    pickle.dump(score, fp)  # 将字典对象 score 序列化并写入到文件中

with open('score.dat', 'rb') as fp:
    result = pickle.load(fp)  # 从文件中读取并反序列化为对象

print(result)  # 打印反序列化后的结果(原始的字典对象)

10.1 使用shutil模块中的move()函数进行文件移动。

import shutil
shutil.move(r'd:\1.txt',r'e:\1.txt')

10.2 编写代码,将当前工作目录修改为"C:",并验证,最后将当前工作目录恢复为原来的目录。

import os

os.getcwd()# 获取当前路径
os.chdir(r'c:\\') # 修改工作目录到C盘
os.getcwd()
os.chdir(r'd:\\Python\\demo') # 恢复到原来的目录
os.getcwd()

10.3 编写程序,用户输入一个目录和一个文件名,搜索该目录及其子目录中是否存在该文件。

import os

directory = input('请输入文件夹:')
filename = input('请输入文件名:')  

paths = os.walk(directory)  # 使用os.walk()函数遍历文件夹及其子文件夹
for root, dirs, files in paths:  # 遍历每个子文件夹中的目录、子文件夹和文件列表
    if filename in files:  # 判断文件名是否在文件列表中
        print('Yes')  # 如果找到匹配的文件名,打印'Yes'
        break  # 找到后跳出循环
else:
    print('No')  # 如果未找到匹配的文件名,在循环结束后打印'No'

11.1 Python异常处理结构有哪几种形式?

1)try…except…

try:
	# 可能会引发异常的代码,先执行一下试试
    x=int(input('请输入一个整数:'))
    print(x)
except Exception as e:
	# 若try中的代码抛出异常并被except捕捉,就执行这里的代码
    print('Error.')

2)try…except…else…

try:
	# 可能会引发异常的代码
    x=int(input('请输入一个整数:'))
    print(x)
except Exception as e:
	# 用来处理异常的代码
    print('Error.')
else:
    # 若try子句中的代码没有引发异常,就继续执行这里的代码
    print('success')
  1. try…except…finally…
try:
	# 可能会引发异常的代码
    x=int(input('请输入一个整数:'))
    print(x)
except Exception as e:
	# 用来处理异常的代码
    print('Error.')
finally:
    # 无论try子句中的代码是否引发异常,都会执行这里的代码
    print(-1)
  1. 捕捉多种异常的异常处理结构
try:
	# 可能会引发异常的代码
    x=float(input('请输入被除数:'))
    y=float(input('请输入除数:'))
    z=x/y
except ZeroDivisionError:#except Exception1:
	# 处理异常类型1的代码
    print('除数不能为零')
except TypeError:#except Exception2:
    # 处理异常类型2的代码
    print('被除数和除数应为数值类型')
except NameError:#except Exception3:
    # 处理异常类型3的代码
    print('变量不存在')
else:
    print(x,'/',y,'=',z)
finally:
    # 无论是否发生异常都会执行这段程序
    print('程序结束')

12.2 使用Python内置函数dir()查看Cursor对象中的方法,并使用内置函数help()查看其用法。

import sqlite3

# 创建数据库连接
conn = sqlite3.connect('database.db')

# 创建游标对象
cursor = conn.cursor()
methods = dir(cursor)
print(methods)

help(cursor.method_name)  # 将 `method_name` 替换为要查看的方法名

12.5 叙述使用Python操作MySQL数据库的步骤

import pymysql

conn=pymysql.connect(host='127.0.0.1',user='root',password='123456',database='MySQL',charset='UTF8MB4')

cursor = conn.cursor()

def doSQL(sql):
    cursor.execute(sql)
    conn.commit()

# 1.创建test数据库
doSQL('CREATE DATABASE IF NOT EXISTS test;')

# 2.在test数据库中创建question数据表
sql='''
CREATE TABLE IF NOT EXISTS test.questions(
id INT auto_increment PRIMARY KEY,
wenti CHAR(200) NOT NULL UNIQUE,
daan CHAR(50) NOT NULL
)ENGINE=innodb DEFAULT CHARSET=UTF8MB4;
'''
doSQL(sql)

# 3.插入数据
for i in range(10):
    sql='INSERT INTO test.questions(wenti,daan) VALUE ("测试问题{0}","答案{0}");'.format(i)
    cursor.execute(sql)
conn.commit()

# 4.修改数据
doSQL('UPDATE test.questions SET daan="被修改了" WHERE wenti="测试问题6";')

# 5.删除指定的数据
doSQL('DELETE FROM test.questions WHERE daan="答案8";')

# 6.查询并输出数据
sql='SELECT * FROM test.questions'
cursor.execute(sql)
for row in cursor.fetchall():
    print(row)

# 7.删除所有数据
doSQL('DELETE FROM test.questions')

# 8.删除数据表
doSQL('DROP TABLE IF EXISTS test.questions;')

# 9.删除数据库
doSQL('DROP DATABASE IF EXISTS test;')

# 10.关闭游标和连接
cursor.close()
conn.close()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1521451.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WebGIS之实现查询地区天气并让地区高亮

一.预览>> 二.思路>> 根据搜索框的内容来进行页面视角的切换&#xff0c;对应的地区高亮&#xff0c;右边有关天气的地方实时更新&#xff0c;并且因为代码体量非常小&#xff0c;并没有选择在框架下完成。直接一个html文件搞定了&#xff0c;但实际上还是有一些坑…

C#集合和数据结构,随笔记录

C#集合和数据结构 System.Collections命名空间包含接口和类&#xff0c;这些接口和类定义各种对象&#xff08;如列表/链表、位数组、哈希表、队列和堆栈&#xff09;的集合 System.Collections.Generic命名空间&#xff1a; 所有集合都直接或间接基于ICollection接口 列表类集…

Vue3+TS+Vite 找不到模块“@/components/xxx/xxx”或其相应的类型声明

引入vue文件时文件是存在的&#xff0c;引入路径也是对的&#xff0c;报找不到模块&#xff0c;有一些解决方案是在tsconfig.json里面做一些配置&#xff0c;大家可以自行百度&#xff08;不知道是不是我百度的不对&#xff0c;我的没有解决&#xff09;还有一种是在项目根目录…

免密ssh密钥登录Linux该如何设置

我们在使用ssh客户端远程连接Linux服务器时&#xff0c;为了考虑安全方面的因素&#xff0c;通常使用密钥的方式来登录。密钥分为公钥和私钥&#xff0c;这两把密钥可以互为加解密。公钥是公开的&#xff0c;私钥是由个人自己持有&#xff0c;并且必须妥善保管和注意保密。 Li…

安装python、pycharm,打好基础,准备飞起

python安装使用 安装python安装包 以下为自定义安装python安装包&#xff0c;无特殊要求可直接进行安装。 勾选Add Python 3.6 to PATH&#xff0c; 然后点击 Customize installation&#xff0c;进行自定义安装。 所有的都勾上&#xff0c;然后点击Next。 可选择自己需要…

perl 用 XML::DOM 解析 Freeplane.mm文件,生成测试用例.csv文件

Perl 官网 www.cpan.org 从 https://strawberryperl.com/ 下载网速太慢了 建议从 https://download.csdn.net/download/qq_36286161/87892419 下载 strawberry-perl-5.32.1.1-64bit.zip 约105MB 解压后安装.msi&#xff0c;装完后有520MB&#xff0c;建议安装在D:盘。 运行 …

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:ListItemGroup)

该组件用来展示列表item分组&#xff0c;宽度默认充满List组件&#xff0c;必须配合List组件来使用。 说明&#xff1a; 该组件从API Version 9开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。该组件的父组件只能是List。 使用说明 当List…

拿捏指针(二)

个人主页&#xff1a;秋邱博客 所属栏目&#xff1a;C语言 &#xff08;感谢您的光临&#xff0c;您的光临蓬荜生辉&#xff09; 目录 前言 数组与指针 数组名的理解 指针数组与数组指针 指针数组 数组指针 数组传参 一维数组传参的本质 二维数组传参的本质 二维数组…

Spring源码流程图

1.IOC源码 流程图地址&#xff1a;https://www.processon.com/view/link/626ce8dc0e3e742d46229977 2.AOP源码 流程图地址&#xff1a;https://www.processon.com/view/link/627134571efad45d06d6a1de 3.事务源码 流程图地址&#xff1a;https://www.processon.com/view/li…

Android中compile,implementation和api的区别,以及gradle-wrapper的详解

前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂&#xff0c;风趣幽默"&#xff0c;感觉非常有意思,忍不住分享一下给大家。 &#x1f449;点击跳转到教程 前言&#xff1a; compile,implementation和api的区别和其作用 compile和api会进行传递…

AI赋能写作:AI大模型高效写作一本通

❤️作者主页&#xff1a;小虚竹 ❤️作者简介&#xff1a;大家好,我是小虚竹。2022年度博客之星评选TOP 10&#x1f3c6;&#xff0c;Java领域优质创作者&#x1f3c6;&#xff0c;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;掘金年度人气作…

15.7k stars一个实用型OCR,支持80多种语言

一个实用型 OCR,支持 80 多种语言和所有流行的书写脚本&#xff0c;包括&#xff1a;拉丁文、中文、阿拉伯文、梵文、西里尔文等。 特点 支持本地或云/API部署 准确度提高到 99% 以上 完全可定制,支持 80 多种语言 支持表格识别 二维码/条码提取识别 GitHub数据 15.7k s…

PS学习-放大图片保持清晰

快捷键冲突所以有的不能截屏 500就是原图的5倍 还很清晰

如何本地搭建hMailServer邮件服务

文章目录 前言1. 安装hMailServer2. 设置hMailServer3. 客户端安装添加账号4. 测试发送邮件5. 安装cpolar6. 创建公网地址7. 测试远程发送邮件8. 固定连接公网地址9. 测试固定远程地址发送邮件 前言 hMailServer 是一个邮件服务器,通过它我们可以搭建自己的邮件服务,通过cpola…

获取远程管理软件保存的凭据

点击星标&#xff0c;即时接收最新推文 本文选自《内网安全攻防&#xff1a;红队之路》 扫描二维码五折购书 内网敏感数据的发现 内网的核心敏感数据&#xff0c;不仅包括数据库、电子邮件&#xff0c;还包括个人数据及组织的业务数据、技术数据等。可以说&#xff0c;价值较高…

C语言数据结构基础笔记——树、二叉树简介

1.树 树是一种 非线性 的数据结构&#xff0c;它是由 n &#xff08; n>0 &#xff09;个有限结点组成一个具有层次关系的集合。 把它叫做树是因 为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。 &#xff08;图片来源于网络&#xff09;…

【Unity】persistentDataPath、streamingAssetsPath和dataPath

介绍 我们在用Unity进行开发时&#xff0c;资源路径是我们最常用到的&#xff0c;下面我就来简单介绍一下几种常用的路径。 1.dataPath dataPath是包含游戏数据文件夹的路径&#xff0c;是app程序包安装路径 Windows: xxx /Assets &#xff08;如下图&#xff09; Mac: xxx…

ideaSSM失物招领管理系统网页模式开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 idea ssm 失物招领管理系统是一套完善的完整信息管理系统&#xff0c;结合SSM框架完成本系统SpringMVC spring mybatis &#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码和数…

计算机网络笔记(湖科大教书匠版本)

目录 第一章、 ①三种交换方式 ②计算机网络的定义和分类 ③计算机网络的性能指标 1.速率 2.带宽 3.吞吐量 4.时延 5.时延带宽积 6.往返时间 7.利用率 8.丢包率 ④常见的三种计算机网络体系结构​编辑 ⑤计算机网络体系结构分层的必要性​编辑 第二章、物理层 ①…

【Java】常用类和基础API

文章目录 一、String的特性二、String的内存结构2.1 拼接2.2 new 三、String的常用API-13.1 构造器 四、String的常用API-24.1 常用方法4.2 查找4.3 字符串截取4.4 和字符/字符数组相关4.5 开头与结尾4.6 替换 五、StringBuffer、StringBuilder5.1 StringBuilder、StringBuffer…