实验1  Python编程基础

(1)在交互式环境中打印“Hello world”字符串。记录操作过程。

(2)创建脚本helloworld.py,在命令符提示环境中执行程序,打印“Hello world”字符串。记录操作过程。

(3)使用pip命令查看当前已安装的所有模块。

pip list

(4)编写一个猜年龄的小游戏,如果输入的年龄正确输出“Yes,it is right!”否则输出“No, you are wrong!”

year = 20
guess_age = int(input("请输入你猜的年龄:"))
if year == guess_age:
    print("Yes,it is right!")
else:
    print("No,you are wrong!")

 (5)编写程序,输入<人名 1>和<人名 2>,在屏幕上显示如下的新年贺卡

【源程序】

###################################

# <人名 1> 新年贺卡 <人名 2>

# python0101.py

# 2015

###################################

name1 = input("Please enter a value for name1:")
name2 = input("Please enter a value for name2:")
print(f'''
###################################
# {name1} 新年贺卡 {name2}
# python0101.py
# 2015
###################################
''')

(6)编写程序,输入球的半径,计算球的表面积和体积,半径为实数,用π,结果输出为浮点数,共10位其中2位有效数字。

import math

r = float(input("Please enter a valur for radius:"))
surface = '%.10f' % round(4 * math.pi * r * r, 2)
volume = '%.10f' % round(4 / 3 * math.pi * (r ** 3), 2)
print(f"The surface area of sphere is {surface}")
print(f'The volume of sphere if {volume}')

(7) 用id()函数输出变量地址的示例程序:

str1 = "这是一个变量";

print("变量str1的值是:"+str1);

print("变量str1的地址是:%d" %(id(str1)));

str2 = str1;

print("变量str2的值是:"+str2);

print("变量str2的地址是:%d" %(id(str2)));

str1 = "这是另一个变量";

print("变量str1的值是:"+str1);

print("变量str1的地址是:%d" %(id(str1)));

print("变量str2的值是:"+str2);

print("变量str2的地址是:%d" %(id(str2)));

str1 = "这是一个变量"
print("变量str1的值是:" + str1)
print("变量str1的地址是:%d" % (id(str1)))
str2 = str1
print("变量str2的值是:" + str2)
print("变量str2的地址是:%d" % (id(str2)))
str1 = "这是另一个变量"
print("变量str1的值是:" + str1)
print("变量str1的地址是:%d" % (id(str1)))
print("变量str2的值是:" + str2)
print("变量str2的地址是:%d" % (id(str2)))

(8)参照下面的步骤练习使用运算符

x =3

x += 3

print(x)

x -= 3

print(x)

x *= 3

print(x)

x /= 3

print(x)

x = 3
x += 3
print(x)
x -= 3
print(x)
x *= 3
print(x)
x /= 3
print(x)

实验2  Python序列、字符串处理

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

aList = [1, 2, 3, 4]

count = 0

for i in aList:
    for j in aList:
        for k in aList:
            if (i != j) and (i != k) and (j != k):
                count += 1
                print(f"{i}{j}{k}", end=" ")

print("")
print(f"The count is {count}")

(2)输入某年某月某日,判断这一天是这一年的第几天?

year = int(input('请输入年份:'))
mouth = int(input('请输入月份:'))
day = int(input('请输入日:'))
mouths = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

if year % 400 == 0 or year % 4 == 0:
    mouths[3] = mouths[3] + 1

if 0 < mouth <= 12:
    days = 0

    for item in range(mouth):
        sum = mouths[item]
        days = days + sum

    result = days + day
    print(f'今天是今年的第{result}天')
else:
    print('输入日期超出范围')

(3)输入三个整数x,y,z,请把这三个数由小到大输出。

aList = [int(input("Please input a value for x:")), int(input("Please input a value for y:")),
         int(input("Please input a value for z:"))]

print(sorted(aList))

(4)输出9*9乘法口诀表。

print('\n'.join([' '.join([f"{j}x{i}={i * j}" for j in range(1, i + 1)]) for i in range(1, 10)]))

(5)判断101-200之间有多少个素数,并输出所有素数。

result = []

for i in range(101, 200):
    for j in range(2, i - 1):
        if i % j == 0:
            break
    else:
        result.append(i)

print(result)
print(f"素数一共有{len(result)}个")

(6)输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

str = input("请输入一行字符:")

count_alpha = 0
count_space = 0
count_digit = 0
count_other = 0

for i in str:
    if i.isalpha():
        count_alpha += 1
    if i.isspace():
        count_space += 1
    if i.isdigit():
        count_digit += 1
    else:
        count_other += 1

print(f"{str}中的英文字母个数为:{count_alpha}")
print(f"{str}中的空格个数为:{count_space}")
print(f"{str}中的数字个数为:{count_digit}")
print(f"{str}中的其他字符个数为:{count_other}")

(7)求1!+2!+3!+...+20!的和。

aList = []

for i in range(1, 21):
    num = 1
    for j in range(1, i + 1):
        num *= j
    aList.append(num)

print(sum(aList))

(8)设计一个字典,并编写程序,用户输入内容作为键,然后输出字典中对应的值,如果用户输入的键不存在,则输出“您输入的键不存在!”

d = {'sjn': '1', 'daning': 2, 'jit': 3, 'nanjing': 4}
a = input("请输入键:")
print(d.get(a, "您输入的键不存在!"))

(9)编写程序,生成包含20个随机数的列表,然后将前10个元素升序排列,后10个元素降序排列,并输出结果。

from random import choices

data = choices(range(100), k=20)
print(data)
data[:10] = sorted(data[:10])
data[10:] = sorted(data[10:], reverse=True)
print(data)

(10)字符串 a = "aAsmr3idd4bgs7Dlsf9eAF"

a.请将 a 字符串的数字取出,并输出成一个新的字符串。

b.请统计 a 字符串出现的每个字母的出现次数(忽略大小写,a 与 A 是同一个字母),并输出成一个字典。 例 {'a':3,'b':1}

c.请去除 a 字符串多次出现的字母,仅留最先出现的一个,大小写不敏感。例

'aAsmr3idd4bgs7Dlsf9eAF',经过去除后,输出 'asmr3id4bg7lf9e'

d.按 a 字符串中字符出现频率从高到低输出到列表,如果次数相同则按字母顺序排列。

a = "aAsmr3idd4bgs7Dlsf9eAF"

str_digit = ''

for i in a:
    if i.isdigit():
        str_digit += i

print(str_digit)

lower_a = a.lower()
c = {key: lower_a.count(key) for key in lower_a if key.isalpha()}
print(c)

result = []
for i in a:
    if i not in result:
        if ('A' <= i <= 'Z') and (i.lower() not in result):
            result.append(i)
        elif ('a' <= i <= 'z') and (i.upper() not in result):
            result.append(i)
        elif not i.isalpha():
            result.append(i)
print("".join(result))

(11)回文是一种“从前向后读”和“从后向前读”都相同的字符串。如“rotor”是一个回文字符串。定义一个函数,判断一个字符串是否为回文字符串,并测试函数的正确性。

def isPalindrome(str):
    rever_str = str[::-1]
    if rever_str == str:
        print(f"{str}是回文字符串!")
    else:
        print(f"{str}不是回文字符串!")

isPalindrome("1632")
isPalindrome("16322361")

实验3  函数及Python类的定义与使用

(1)定义一个函数,实验给定任意字符串,查找其中每个字符的最后一次出现,并按每个字符最后一次出现的先后顺序依次存入列表。例如对于字符串'abcda'的处理结果为['b', 'c', 'd', 'a'],而字符串'abcbda'的处理结果为['c', 'b', 'd', 'a']。测试函数的正确性。

aList = list()

str1 = input("Please enter a value for str1:")

for i in str1:
    if aList.__contains__(i):
        aList.remove(i)
        aList.append(i)
    else:
        aList.append(i)

print(aList)

(2)编写函数,使用非递归方法对整数进行因数分解。

def g(h):
    list1 = []
    while h > 1:
        for i in range(h-1):
            k = i + 2
            if h % k == 0:
                list1.append(k)
                h = h//k
                break
    print(list1)

g(12)

(3)编写总的“车”类(VehicleClass),其中描述车名、车轮数,以及机动车和非机动车变量, 以及开车方法;编写继承“车”类的公共汽车类(BusClass)和自行车类(BicycleClass)。

class VehicleClass:
    def __int__(self, name, wheel, kind):
        self.name = name
        self.wheel = wheel
        self.kind = kind

    def drive_car(self):
        print(f"我正在驾驶{self.name}汽车")


class BusClass(VehicleClass):
    pass


class BicycleClass(VehicleClass):
    pass

(4)自定义集合。模拟Python内置集合类型,实现元素添加、删除以及并集、交集、对称差集等基本运算。

set = []


def add():
    num = input("input to add :")
    for item in set:
        if num.__eq__(item):
            print("%s already exists \n" % num)
            return
    set.append(num)
    print("%s has been add \n" % num)


def remove(item):
    set.remove(item)
    print("%s has remove \n" % item)


def intersection(other):
    result = []
    for item in other:
        if set.__contains__(item):
            result.append(item)
    print("The intersection is:" + str(result))


def union(other):
    result = set.copy()
    for item in other:
        if not result.__contains__(item):
            result.append(item)
    print("The union is:" + str(result))


def symmetric_difference(other):
    intersection = []
    for item in other:
        if set.__contains__(item):
            intersection.append(item)

    union = set.copy()
    for item in other:
        if not union.__contains__(item):
            union.append(item)

    result = union.copy()
    for item in union:
        if intersection.__contains__(item):
            result.remove(item)

    print("The symmetric difference is:" + str(result))


def show_set():
    print("The set is: " + str(set))


add()
add()
add()
add()

remove(input("Please enter the element to remove: "))
show_set()

other = ['1', '3', '5', '7']
intersection(other)
union(other)
symmetric_difference(other)

(5)自定义栈,实现基本的入栈、出栈操作。

stack = []


def push_stack():
    num = input("input to push :")
    stack.append(num)
    print("%s has been push " % num)


def pop_stack():
    print("%s has out" % stack.pop())


def show_stack():
    print(stack)


def show_menu():
    commands = {'0': push_stack,
                '1': pop_stack,
                '2': show_stack,
                }
    prompt = """
    (0):push stack
    (1):pop stack 
    (2):show stack
    (3):exit
    input what U want(0/1/2/3):"""
    while True:
        choice = input(prompt).strip()[0]
        if choice == 3:
            break
        if choice not in '0123':
            print("Invalid input,Try again")
        commands[choice]()


show_menu()

(6)设计点类,并为这个点类设计一个方法计算两点之间的距离。

import math


class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def getDistance(self, other):
        print(f"两点之间的距离为:{round(math.sqrt((self.x - other.x) ** 2 + (self.y - other.y) ** 2),2)}")


point1 = Point(1, 1)
point2 = Point(2, 2)
point1.getDistance(point2)

(7)设计长方形类,并用其成员函数计算两个给定的长方形的周长和面积。

class Rectangle:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def getArea(self):
        print(f"长方形的面积为{self.x * self.y}")

    def getGirth(self):
        print(f"长方形的周长为{self.x * 2 + self.y * 2}")


rectangle1 = Rectangle(2, 3)
rectangle1.getArea()
rectangle1.getGirth()

rectangle2 = Rectangle(5, 6)
rectangle2.getArea()
rectangle2.getGirth()

(8)试编码实现简单的银行业务:处理简单帐户存取款、查询。编写银行帐户类BankAccount,包含数据成员:余额(balance)、利率(interest);操作方法:查询余额、存款、取款、查询利率、设置利率。创建BankAccount类的对象,并完成相应操作。

# 试编码实现简单的银行业务:处理简单帐户存取款、查询。
# 编写银行帐户类BankAccount,包含数据成员:余额(balance)、利率(interest);
# 操作方法:查询余额、存款、取款、查询利率、设置利率。创建BankAccount类的对象,并完成相应操作。

class BankAccount:
    def __init__(self, name, deposit, interest):
        self.name = name
        self.deposit = deposit
        self.interest = interest
        print(f"尊贵的{self.name}用户,您好!您于我行开户成功!当前余额为{self.deposit},利率为{self.interest}/年!")
        print("-------------------------------------------------------------------")

    def queryBalance(self):
        print(f"尊贵的{self.name}用户,您好!您当前的账户余额为{self.deposit}")

    def saveMoney(self, money):
        self.deposit += money
        print(f"尊贵的{self.name}用户,您好!当前您正在向我行存入{money}元钱...")
        print(f"当前账上余额为{self.deposit},欢迎您的下次光临!")

    def drawMoney(self, money):
        print(f"尊贵的{self.name}用户,您好!当前您正在从我行取走{money}元钱...")
        if self.deposit < money:
            print("抱歉,您账户余额不足")
        else:
            self.deposit -= money
            print(f"操作成功!当前账上余额为{self.deposit},欢迎您的下次光临!")

    def queryInterest(self):
        print(f"当前我行利率为{self.interest}/年!")

    def setInterest(self, interest):
        self.interest = interest
        print(f"当前我行利率调整为{self.interest}/年!")

    def userOperation(self):
        while True:
            print('''
0   ------->    查询余额
1   ------->    存款
2   ------->    取款
3   ------->    查询利率
4   ------->    设置利率
5   ------->    退出系统
            ''')
            flag = int(input("请输入对应的数字:"))
            print("-------------------------------------------------------------------")
            if flag == 0:
                self.queryBalance()
            elif flag == 1:
                self.saveMoney(int(input("请输入您的存钱数:")))
            elif flag == 2:
                self.drawMoney(int(input("请输入您的取款数:")))
            elif flag == 3:
                self.queryInterest()
            elif flag == 4:
                self.setInterest(float(input("请输入您要设置的利率:")))
            else:
                print("退出成功!")
                exit(0)


myBank = BankAccount("大柠", 10000, 1.5)
myBank.userOperation()

实验4  Python综合应用

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

with open("demo.txt", "r") as f:
    data = f.read().swapcase()
    print(data)

(2)读取文本文件data.txt中所有整数,将其按升序排序后再写入文本文件。

with open('data.txt', 'r') as fp:
    data = fp.readlines()
data = [int(line.strip()) for line in data]
data.sort()
data = [str(i) + '\n' for i in data]
with open('data.txt', 'w') as fp:
    fp.writelines(data)

(3)编写程序,将包含学生成绩的字典保存为二进制文件,然后再读取内容并显示。

import pickle

stu_dict = {"数据结构": 98,
            "离散数学": 95,
            "计算机组成原理": 93,
            "Java": 94}

s = pickle.dumps(stu_dict)

with open("./dict.txt", "wb") as f:
    f.write(s)
    f.close()

with open("./dict.txt", "rb") as f:
    a_dict = f.read()
    f.close()
a_dict = pickle.loads(a_dict)

print(a_dict)

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

import os

catalogue = input("请输入目录:")
filename = input("请输入文件名:")
flag = True

# os.walk返回一个元组,包括3个元素:
# 所有路径名、所有目录列表与文件列表
tuple_dirs = os.walk(catalogue)

for root, dirs, files in tuple_dirs:     # 遍历该元组的目录和文件信息
    if filename in files:
        print(f"{catalogue} 目录下有文件 {filename}")
        flag = False
        break
if flag:
    print(f"{catalogue} 目录下没有文件 {filename}")

(5)不使用拷贝的方式计算((A+B)*(-A/2)) 。

import numpy as np

A = np.ones(3) * 1
B = np.ones(3) * 2
print(np.multiply(np.add(A, B, out=B), np.negative(np.divide(A, 2, out=A), out=A),
                  out=A))

(6)生成一个5*5的矩阵,其中每一行的值为0到4

import numpy as np

Z = np.mod(np.arange(25), 5).reshape(5, 5)
print(Z)

(7)生成一个包含10个元素的向量,其其取值范围为[0,1]

import numpy as np

print(np.random.random(10))

(8)给定一个4维向量,求倒数第一维、倒数第二维的和。

import numpy

arr = numpy.random.randint(2, size=(3, 3, 3, 3))
print('原始数据:')
print(arr)
ax1 = numpy.sum(arr, axis=2)
print('倒数第二维的和:')
print(ax1)
ax2 = numpy.sum(arr, axis=3)
print('倒数第一维的和:')
print(ax2)
print('最后两维的和:')
print(ax1 + ax2)

(9)画出以下函数,其取值范围为[0,20].需要增加坐标标签,图片标题等。

from matplotlib import pyplot as plt
import numpy as np
import math

x = list(np.arange(0, 20, 0.1))
y = []
for i in range(len(x)):
    y.append(math.sin(x[i] - 2) ** 2 * math.e ** (0 - x[i] ** 2))
plt.plot(x, y)
plt.xlabel('x-axis', fontsize=14)
plt.ylabel('y-axis', fontsize=14)
plt.title('f(x) = sin²(x-2)e^(-x²)')
plt.show()

(10)画出正弦曲线, 需要增加坐标标签,图片标题等。

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-20, 20, 100)
y = np.sin(x)
plt.plot(x, y)
plt.xlabel('x-axis', fontsize=14)
plt.ylabel('y-axis', fontsize=14)
plt.title('f(x) = sinx')
plt.show()

(11)根据企业成本及利润多年的变化情况,分析下一年的企业利润会是多少。

cost = [400,450,486,500,510,525,540,549,558,590,610,640,680,750,900]
profit =[80,89,92,102,121,160,180,189,199,203,247,250,259,289,356]

import matplotlib.pyplot as plt
import numpy as np
from sklearn import linear_model 
X = [[400], [450], [486], [500], [510], [525], [540], [549], [558], [590], [610], [640], [680], [750], [900]]
Y = [[80], [89], [92], [102], [121], [160], [180], [189], [199], [203], [247], [250], [259], [289], [356]]
clf = linear_model.LinearRegression()
clf.fit(X, Y) 
X2 = [[400], [750], [950]]
Y2 = clf.predict(X2)
res = clf.predict(np.array([1200]).reshape(-1, 1)) 
print('预测成本1200元的利润:$%.1f' % res)
# plt.plot(X, Y, 'ks')           
plt.scatter(X, Y)
plt.plot(X2, Y2, 'g-') 
plt.show()


 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐