洛谷题单3-P5718 【深基4.例2】找最小值-python-流程图重构

题目描述

给出 nnnnnn 个整数 aia_iai,求这 nnn 个整数中最小值是什么。

输入格式

第一行输入一个正整数 nnn,表示数字个数。

第二行输入 nnn 个非负整数,表示 a1,a2…ana_1,a_2 \dots a_na1,a2an,以空格隔开。

输出格式

输出一个非负整数,表示这 nnn 个非负整数中的最小值。

输入输出样例

输入

5
5 7 4 2 6

输出

2

说明/提示

数据保证,n≤100n\le100n1000≤ai≤10000\le a_i \le 10000ai1000

方式

代码

class Solution:
    @staticmethod
    def oi_input():
        """从标准输入读取数据"""
        num = int(input())
        nums = map(int, input().split())
        return num, nums

    @staticmethod
    def oi_test():
        """提供测试数据"""
        return 5, [5, 7, 4, 2, 6]

    @staticmethod
    def solution(num, nums):
        print(min(nums))


oi_input = Solution.oi_input
oi_test = Solution.oi_test
solution = Solution.solution

if __name__ == '__main__':
    num, nums = oi_test()
    # num, nums = oi_input()
    solution(num, nums)

流程图

结果输出
数据处理
打印结果
print(min_value)
忽略num参数
调用solution方法
计算最小值
min_value = min(nums)
开始
主函数调用
读取输入num
num = int(input())
读取输入列表
nums = map(int, input().split())
结束
import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns from sklearn.linear_model import LogisticRegression from sklearn.preprocessing import StandardScaler import statsmodels.api as sm # 用于计算P值 # ---------------------- # 1. 生成模拟数据(贴合转运场景) # ---------------------- np.random.seed(42) # 固定随机数,保证结果可复现 n = 500 # 样本量 data = pd.DataFrame({ # 自变量:候选影响因素 &#39;GCS评分&#39;: np.random.randint(3, 16, size=n), # GCS评分3-15分,越低病情越重 &#39;管道数量&#39;: np.random.randint(0, 6, size=n), # 0-5根管道 &#39;转运时长&#39;: np.random.randint(5, 60, size=n), # 5-60分钟 &#39;镇静程度&#39;: np.random.randint(0, 3, size=n), # 0=未镇静,1=浅镇静,2=镇静 &#39;生命体征波动&#39;: np.random.randint(0, 3, size=n), # 0=稳定,1=轻度,2=显著 # 因变量:病情变化(问1核心) # 模拟逻辑:GCS低、管道多、转运久、镇静不足、生命体征波动大→更易病情变化 &#39;病情变化&#39;: np.where( (np.random.rand(n) < 0.1) + # 础概率 (data[&#39;GCS评分&#39;] < 9) * 0.3 + # GCS<9(昏迷)增加30%概率 (data[&#39;管道数量&#39;] > 2) * 0.2 + # 管道>2根增加20%概率 (data[&#39;转运时长&#39;] > 30) * 0.15 + # 转运>30分钟增加15%概率 (data[&#39;镇静程度&#39;] == 0) * 0.25 + # 未镇静增加25%概率 (data[&#39;生命体征波动&#39;] == 2) * 0.3 # 显著波动增加30%概率 > 0.5, 1, 0 ) }) # ---------------------- # 2. 逻辑回归筛选变量(计算P值,保留P<0.05) # ---------------------- # 提取自变量和因变量 X = data[[&#39;GCS评分&#39;, &#39;管道数量&#39;, &#39;转运时长&#39;, &#39;镇静程度&#39;, &#39;生命体征波动&#39;]] y = data[&#39;病情变化&#39;] # 用statsmodels计算P值(更适合筛选变量) X_sm = sm.add_constant(X) # 添加常数项(截距) logit_model = sm.Logit(y, X_sm) result = logit_model.fit() # 输出变量系数和P值 var_pvalues = result.pvalues.drop(&#39;const&#39;) # 排除常数项 significant_vars = var_pvalues[var_pvalues < 0.05].index.tolist() # 显著变量列表 print("步骤1:逻辑回归筛选的显著影响因素(P<0.05):") print(significant_vars) print("\n各变量P值:") print(var_pvalues.round(4)) # ---------------------- # 3. 可视化:变量重要性(系数绝对值) # ---------------------- plt.figure(figsize=(8, 5)) coef = result.params.drop(&#39;const&#39;).abs() # 系数绝对值(代表影响强度) sns.barplot(x=coef.index, y=coef.values) plt.title(&#39;逻辑回归筛选的变量重要性(系数绝对值)&#39;, fontsize=12) plt.ylabel(&#39;系数绝对值(越大影响越显著)&#39;) plt.xticks(rotation=30) plt.tight_layout() plt.show() from pgmpy.models import BayesianNetwork from pgmpy.estimators import HillClimbSearch, BicScore from pgmpy.inference import VariableElimination import networkx as nx # ---------------------- # 1. 准备数据(仅保留显著变量+新增不良事件因变量) # ---------------------- # 新增“不良事件”因变量(模拟:由病情变化、管道数量、镇静程度共同影响) data[&#39;不良事件&#39;] = np.where( (data[&#39;病情变化&#39;] == 1) * 0.4 + # 病情变化增加40%概率 (data[&#39;管道数量&#39;] > 2) * 0.3 + # 管道多增加30%概率 (data[&#39;镇静程度&#39;] == 0) * 0.25 # 未镇静增加25%概率 > 0.5, 1, 0 ) # 仅保留步骤1筛选的显著变量+结局变量 bn_data = data[significant_vars + [&#39;病情变化&#39;, &#39;不良事件&#39;]] # ---------------------- # 2. 构建贝叶斯网络(学习结构和参数) # ---------------------- # 用Hill-Climb算法学习网络结构(于数据关联) hc = HillClimbSearch(bn_data) model = hc.estimate(scoring_method=BicScore(bn_data)) # 用BIC评分优化结构 # 学习条件概率表(CPT) from pgmpy.estimators import MaximumLikelihoodEstimator model.fit(bn_data, estimator=MaximumLikelihoodEstimator) # ---------------------- # 3. 可视化:网络关联路径 # ---------------------- plt.figure(figsize=(10, 6)) pos = nx.spring_layout(model) # 布局 nx.draw(model, pos, with_labels=True, node_size=3000, node_color=&#39;lightblue&#39;, font_size=10, arrowsize=20) # 标注关键路径(示:手动标注临床关注的路径) critical_edges = [(&#39;GCS评分&#39;, &#39;生命体征波动&#39;), (&#39;生命体征波动&#39;, &#39;病情变化&#39;), (&#39;管道数量&#39;, &#39;不良事件&#39;), (&#39;病情变化&#39;, &#39;不良事件&#39;)] nx.draw_networkx_edges(model, pos, edgelist=critical_edges, edge_color=&#39;red&#39;, width=2) plt.title(&#39;贝叶斯网络:转运相关因素关联路径(红色为关键路径)&#39;, fontsize=12) plt.tight_layout() plt.show() # ---------------------- # 4. 推理:关键路径概率验证 # ---------------------- infer = VariableElimination(model) # :计算“GCS评分低(<9)”时,“不良事件”的发生概率 prob_bad = infer.query(variables=[&#39;不良事件&#39;], evidence={&#39;GCS评分&#39;: 6}) # GCS=6(低) print("\n步骤2:贝叶斯网络推理结果:") print(f"GCS评分低(6分)时,不良事件发生概率:{prob_bad.values[1]:.2f}") from scipy.stats import spearmanr # ---------------------- # 1. 提取贝叶斯网络中的核心变量对 # ---------------------- # 于贝叶斯网络的关键路径,选择待分析的变量对 core_pairs = [ (&#39;GCS评分&#39;, &#39;生命体征波动&#39;), # GCS低是否与生命体征波动相关 (&#39;生命体征波动&#39;, &#39;病情变化&#39;), # 波动是否与病情变化相关 (&#39;管道数量&#39;, &#39;不良事件&#39;) # 管道数量是否与不良事件相关 ] # ---------------------- # 2. 斯皮尔曼相关分析 # ---------------------- corr_results = [] for var1, var2 in core_pairs: rho, p = spearmanr(data[var1], data[var2]) corr_results.append({ &#39;变量对&#39;: f"{var1}-{var2}", &#39;相关系数ρ&#39;: round(rho, 2), &#39;P值&#39;: round(p, 4), &#39;关联强度&#39;: &#39;强&#39; if abs(rho) > 0.5 else &#39;中&#39; if abs(rho) > 0.3 else &#39;弱&#39; }) # 输出结果 corr_df = pd.DataFrame(corr_results) print("\n步骤3:斯皮尔曼相关分析结果(核心变量对):") print(corr_df) # ---------------------- # 3. 可视化:相关系数热力图 # ---------------------- plt.figure(figsize=(6, 4)) corr_matrix = data[significant_vars + [&#39;病情变化&#39;, &#39;不良事件&#39;]].corr(method=&#39;spearman&#39;) sns.heatmap(corr_matrix, annot=True, cmap=&#39;coolwarm&#39;, vmin=-1, vmax=1) plt.title(&#39;斯皮尔曼相关系数热力图(核心变量)&#39;, fontsize=12) plt.tight_layout() plt.show()怎么改,不能运行
07-24
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值