【数据分析基础】实验二 Python程序流程控制、函数设计与使用

实验目的

  1. 熟悉选择结构嵌套时代码的缩进与对齐。
  2. 理解带 else 子句的循环结构执行流程和条件表达式 value1 if condition else value2 的用法。
  3. 熟悉使用循环和异常处理机构对用户输入进行约束的用法。
  4. 掌握Python程序中进行选择、循环流程控制的语句、语法,熟练运用选择结构和循环结构解决实际问题。
  5. 掌握函数的定义与调用。
  6. 熟练掌握lambda表达式的使用,理解变量作用域的意义、各种函数参数类型的使用。

实验内容:

编写程序,输入一个大于 2 的自然数,然后输出小于该数字的所有素数组成的列表。 (所谓素数,是指除了1和其自身之外没有其他因数的自然数:2,3,5,7,11,13......)

参考代码:

程序代码:

python 复制代码
maxNumber = int(input('请输入一个大于2的自然数:'))
lst = list(range(2, maxNumber))
m = int(maxNumber ** 0.5)

for index, value in enumerate(lst):
    if value > m:
        break
    lst[index+1:] = filter(lambda x: x % value != 0, lst[index+1:])

print(lst)

(2)运行结果(截图):

编写程序,输入若干个成绩,求所有成绩的平均分。每输入一个成绩后询问是否继续输入下一个成绩,回答"yes"就继续输入下一个成绩,回答"no"就停止输入成绩。

参考代码:

程序代码:

python 复制代码
numbers = []  # 使用列表存放成绩数据
while True:
    x = input("请输入一个成绩:")
    try:
        numbers.append(float(x))  # 将输入的成绩转换为浮点数并添加到列表
    except ValueError:
        print("不是合法成绩,请输入一个数值。")
        continue  # 继续下一次循环,不添加非法成绩
    while True:
        flag = input("继续输入吗?(yes/no):")  # 询问用户是否继续输入
        # 限定用户输入内容必须为yes或no
        if flag.lower() not in ('yes', 'no'):
            print("只能输入yes或no")
        else:
            break
    if flag.lower() == 'no':  # 如果用户选择'no',则结束循环
        break

if numbers:  # 如果列表不为空,计算平均分
    average = sum(numbers) / len(numbers)
    print(f"所有成绩的平均分是:{average:.2f}")
else:
    print("没有输入任何成绩。")

(2)运行结果(截图):

编写程序模拟猜数游戏。程序运行时,系统生成一个随机数,然后提示用户进行猜测,并根据用户输入进行必要的提示(猜对了、太大了、太小了),如果猜对则提前结束程序,如果次数用完仍没有猜对,提示游戏结束并给出正确答案。

参考代码:

程序代码:

python 复制代码
from random import randint


def guessNumber(maxValue=10, maxTimes=3):
    value = randint(1, maxValue)  # 随机生成一个1到10之间的整数
    for i in range(maxTimes):
        prompt = 'Start to GUESS:' if i == 0 else 'Guess again:'
        try:
            x = int(input(prompt))
        except:
            print('Must input an integer between 1 and', maxValue)
        else:
            if x == value:
                print('Congratulations!')
                break
            elif x < value:
                print('Too little.')
            else:
                print('Too big.')

    else:  # 检查是否用完了所有的猜测次数
        print('Game Over. FAIL.')
        print(f'The value was {value}.')


guessNumber()

(2)运行结果(截图):

编写程序,输入一个字符串,输出该字符所为密码时的安全强度。

程序代码:

python 复制代码
import string
def check(pwd):
    if not isinstance(pwd, str) or len(pwd) < 8:
        return "not suitable for password"

    # 初始化密码强度等级与包含字符种类的对应关系
    d = {1: 'weak', 2: 'below middle', 3: 'above middle', 4: 'strong'}
    # 初始化一个列表,用来标记密码是否含有数字、小写字母、大写字母和标点符号
    r = [False] * 4
    for ch in pwd:
        # 是否包含数字
        if not r[0] and ch in string.digits:
            r[0]=True
        # 是否包含小写字母
        if not r[1] and ch in string.ascii_lowercase:
            r[1]=True
        # 是否包含大写字母
        if not r[2] and ch in string.ascii_uppercase:
            r[2]=True
        # 是否包含指定的标点符号
        if not r[3] and ch in ',.!:?<>':
            r[3]=True
    # 统计包含的字符种类, 返回密码强度
    return d.get(r.count(True), 'error')
# 测试函数
print(check("a26%Cd."))

(2)运行结果(截图):

编程实现:查找字符串中每个字符的首次出现。给定一个任意字符串,要求得到一个新字符串,重复字符只保留一个,并且新字符串中的字符保持在原字符串中首次出现的先后顺序。例如,abcdaaabe处理后应得到abcde。(使用两种不同的方法)

程序代码:

python 复制代码
from random import choice
from  string import digits

def func1(text):
    # 转换为集合,去重
    result = set(text)
    # 按其在原字符串中的先后顺序,把集合里的字符连接为字符串
    result =''.join(sorted(result, key=text.index))
    return result

def func2(text):
    result=[]
    for ch in text:
        if ch not in result:
            result.append(ch)
    return ''.join(result)

text = ''.join(choice(digits) for _ in  range(30)) # 随机字符串
print(text)
print(func1(text))
print(func2(text))

(2)运行结果(截图):

实验任务

学习教材第1章、第2章内容,根据实验内容练习相关编程知识。

独立完成如下编程任务并提交实验报告。(报告撰写要求详见模板文档)

编写程序,输入一个包含若干整数的列表,输出列表中所有整数连乘的结果。

(1)程序代码:

python 复制代码
from functools import reduce
import operator

def multiply_list_numbers(numbers):
    # 使用reduce和operator.mul来计算列表中所有整数的连乘结果
    result = reduce(operator.mul, numbers, 1)
    return result

# 输入一个包含若干整数的列表
input_numbers = list(map(int, input("请输入一个包含若干整数的列表,以空格分隔:").split()))

# 输出列表中所有整数连乘的结果
print(multiply_list_numbers(input_numbers))

(2)运行结果(截图):

实验总结:

在本次实验中,我深入地学习了Python中的流程控制、函数设计和使用,以及异常处理和输入验证等重要概念。通过编写不同的程序,我不仅巩固了理论知识,而且提高了解决实际问题的能力。

知识点小结:

我熟悉了选择结构嵌套时的代码缩进与对齐,这对于保持代码的可读性至关重要。

我理解了带else子句的循环结构执行流程。

我掌握了如何使用循环和异常处理对用户输入进行约束,确保程序能够处理不合法的输入。

我学习了如何定义和调用函数,这有助于我创建模块化的代码,提高了代码的复用性。

我熟练掌握了lambda表达式的使用,并对变量作用域和函数参数类型有了更深刻的理解。

实验体会:

通过本次实验,我体会到了编程不仅仅是写代码,更重要的是如何设计出清晰、高效、可维护的程序。我学会了如何通过编写函数来简化复杂的问题,并通过合理的输入验证来提高程序的健壮性。

未解决的问题:

尽管我在实验中取得了进步,但在处理大型程序和复杂逻辑时,我仍然感到有些挑战。我还需要进一步学习如何组织代码结构,以及如何更有效地使用高级Python特性,如列表推导式、生成器表达式和装饰器。

改进的方法:

阅读更多的Python代码,特别是那些开源项目和专业代码库,以学习更优秀的编程实践。

参与更多的编程练习和项目,以提高解决实际问题的能力。

相关推荐
Juchecar1 小时前
解惑:NumPy 中 ndarray.ndim 到底是什么?
python
用户8356290780511 小时前
Python 删除 Excel 工作表中的空白行列
后端·python
Json_1 小时前
使用python-fastApi框架开发一个学校宿舍管理系统-前后端分离项目
后端·python·fastapi
RestCloud1 小时前
数据传输中的三大难题,ETL 平台是如何解决的?
数据分析·api
数据智能老司机8 小时前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
数据智能老司机9 小时前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机9 小时前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机9 小时前
精通 Python 设计模式——性能模式
python·设计模式·架构
c8i9 小时前
drf初步梳理
python·django
每日AI新事件9 小时前
python的异步函数
python