2020-08-26

过年了,村里要庆祝一下。村长对村民说:村里有一笔钱作为奖金。让每个人写一个纸条上来,谁写的数与奖金最接近,就算猜中,这笔奖金就归谁,如果有多个人猜中,则平分这笔钱。现在让我们来写一段程序算算都有哪些人得到了奖金?得到多少?
输入:第一行包含2个整数 n,m,分别表示村民人数和村里的奖金总数。 第二行包含n个整数,整数之间以一个空格分开。表示1号,2号,。。。,n号村民猜测的奖金数。(1<=n<=5000)
输出:输出分两行。 第一行包含若干整数,表示得到奖金的村民编号(数据之间有一个空格,最后一个数后面无空格!!!), 第二行包含一个实数(保留1位小数),表示人均奖金金额。
l,m = input().split()
l,m = int(l), int(m)
w = [int(x) for x in input().split()]
f = []
cnt = 0
st = “”
for i in range(l):
f.append(abs(m-w[i]))#把差值放入空列表,并绝对值化
for i in range(len(f)):
if f[i] == min(f):#遍历列表,如果有最小值,把i放入字符串中
st+=str(i+1)
cnt+=1
print(" ".join(st))
print(’%.1f’%(m/cnt))
样例:10 100
50 60 70 80 90 90 110 120 130 140
样例输出:
5 6 7
33.3

这里我想过把列表f排序后让f[i]==f[0]的方法,相当于比较大小嘛,然后输出
但是有个问题,就是虽然输出也是三个数,33.3,但是他输出的是经过排序后的列表中i的值
也就是1 2 3.和样例输出不一样,(方法其实也是可以的)

我当时做作业时不会写,我写了一个if abs(m-w[i])>abs(m-w[i+1]):然后放到新列表里排序,导致总是下表超界,因为到最后一个数的时候i+1是不存在的。所以要设置一个比较的标准,而且根据题意还不能乱掉原数字顺序,所以就采取了min[f]这个值,并且放到字符串里,直接输出。

<think>好的,用户现在遇到了Kubernetes相关的错误:“unable to recognize ... no matches for kind 'PodDisruptionBudget' in version 'policy/v1'”。之前我已经帮助用户分析过这个问题,主要是由于Kubernetes版本和Calico版本不兼容导致的。现在用户进一步询问kubectl版本1.19是否与PodDisruptionBudget的policy/v1不兼容,并想了解详细的版本兼容性问题。 首先,我需要回忆之前的回答。用户上一次的问题是关于安装Calico时出现的PodDisruptionBudget API版本不匹配的问题,我给出了解决方案,包括升级Calico、降级API版本或升级Kubernetes集群。现在用户明确提到了kubectl 1.19,这可能意味着他们的集群版本是1.19,而PodDisruptionBudget在policy/v1这个API版本在Kubernetes 1.21才稳定引入,所以1.19版本确实不支持。需要确认这一点。 接下来,我需要参考用户提供的三个引用内容。不过看起来这些引用是关于不同的错误,比如libGL.so缺失、模块找不到、编译问题等,可能用户误粘贴了这些引用。但根据用户当前的提问,这些引用可能不相关,但用户提到要参考站内引用,可能需要检查是否有相关信息。不过仔细看,引用1是关于libGL和mmcv模块的问题,引用2是Python模块版本的问题,引用3是CentOS下Qt编译的库问题,这些和当前的Kubernetes API版本问题无关。因此,可能需要忽略这些引用,专注于用户当前的问题。 用户的问题核心是kubectl 1.19是否会导致policy/v1的PodDisruptionBudget不兼容。根据Kubernetes的版本支持,PodDisruptionBudget在policy/v1beta1从v1.5开始可用,而policy/v1是在v1.21才成为稳定版本。因此,如果用户使用的是Kubernetes 1.19,那么他们只能使用policy/v1beta1版本的PodDisruptionBudget,而无法使用policy/v1。因此,当用户尝试应用一个使用policy/v1的PodDisruptionBudget的YAML文件时,就会出现API不支持的报错。 需要进一步确认用户的集群版本是否确实是1.19,以及他们使用的Calico或其他工具的版本是否适配该集群。用户提到他们运行的是kubectl 1.19,但kubectl的版本和集群的版本可能不同,需要用户确认集群的实际版本。但通常kubectl版本会与集群版本保持兼容,比如kubectl 1.19对应的集群版本可能在1.19附近。 接下来,用户可能想知道如何检查集群的API版本是否支持policy/v1的PodDisruptionBudget。可以建议用户使用kubectl api-versions命令来查看当前集群支持的API版本列表,确认是否存在policy/v1。如果不存在,明集群版本过低,需要升级或修改YAML文件使用v1beta1。 此外,用户可能还需要知道如何解决这个问题,比如如何降级YAML文件中的API版本,或者升级集群。但根据用户的问题,他们主要是询问版本兼容性,因此需要明确明1.19版本的不兼容性,并提供解决方案。 可能还需要提醒用户,虽然kubectl 1.19可能支持与旧集群通信,但关键还是集群的API server版本。所以用户需要检查集群版本,而不仅仅是kubectl的版本。 总结回答的结构应该包括: 1. 错误原因:Kubernetes 1.19不支持policy/v1的PodDisruptionBudget。 2. 版本兼容性明:policy/v1从1.21开始支持。 3. 解决方法: - 修改YAML使用policy/v1beta1。 - 升级Kubernetes集群到1.21+。 - 使用适配的Calico版本。 4. 检查集群API版本的方法。 5. 相关问题的扩展,比如如何升级集群,检查API版本等。 需要确保回答结构清晰,信息准确,并且针对用户的kubectl 1.19版本进行明。同时,用户可能之前已经尝试过应用Calico的YAML,所以需要再次强调版本适配的重要性,并提供具体的命令和步骤。</think>### **问题分析** 出现 `unable to recognize "PodDisruptionBudget" in version "policy/v1"` 错误的核心原因是 **Kubernetes 集群版本与 `PodDisruptionBudget` 的 API 版本不兼容**。 根据您提到的 `kubectl version 1.19`,推测您的 Kubernetes 集群版本为 **1.19.x**,而 `PodDisruptionBudget` 的 `policy/v1` API 是从 **Kubernetes 1.21** 开始稳定支持的[^1][^3]。在 1.19 版本中,`PodDisruptionBudget` 仅支持 `policy/v1beta1` 版本。 --- ### **版本兼容性明** | Kubernetes 版本 | 支持的 `PodDisruptionBudget` API 版本 | |----------------|-------------------------------------| | ≥1.21 | `policy/v1`(稳定版) | | 1.5-1.20 | `policy/v1beta1`(旧版) | | <1.5 | 不支持 | - **kubectl 1.19 的兼容性**: `kubectl` 客户端版本为 1.19 时,默认会尝试使用集群支持的最新 API 版本。但若集群版本低于 1.21,`policy/v1` 将不可用,导致报错[^1][^3]。 --- ### **解决方法** #### **1. 修改 YAML 文件(适配 Kubernetes 1.19)** 将 `PodDisruptionBudget` 的 `apiVersion` 从 `policy/v1` 改为 `policy/v1beta1`,例如: ```yaml # 修改前 apiVersion: policy/v1 kind: PodDisruptionBudget # 修改后 apiVersion: policy/v1beta1 kind: PodDisruptionBudget ``` #### **2. 检查集群支持的 API 版本** 通过以下命令确认集群是否支持 `policy/v1`: ```bash kubectl api-versions | grep "policy/v1" ``` - 若无输出,则明集群版本过低,需升级或使用 `v1beta1`。 #### **3. 升级 Kubernetes 集群(长期方案)** 若需使用 `policy/v1`,需将集群升级到 **1.21+**: ```bash # 使用 kubeadm 升级(示例) kubeadm upgrade plan kubeadm upgrade apply v1.21.0 ``` --- ### **根本原因验证** 1. **确认集群版本**: ```bash kubectl version --short ``` - 输出示例: ``` Client Version: v1.19.0 Server Version: v1.19.0 # 关键看 Server 版本 ``` 2. **检查 Calico 的兼容性**: Calico v3.19 及更低版本支持 Kubernetes 1.19,若使用新版 Calico(如 v3.20+),需升级集群。 --- ### **关联问题扩展** 1. **为何 `kubectl` 未报版本冲突?** `kubectl` 客户端仅负责发送请求,实际 API 版本由集群的 API Server 决定。即使 `kubectl` 较新,若集群版本低,仍会报错[^3]。 2. **如何安全升级 Kubernetes?** 参考官方文档分阶段升级控制平面和工作节点,并备份关键资源(如 `etcd`)。 --- ### **总结** - **直接原因**:Kubernetes 1.19 不支持 `policy/v1`。 - **解决方案**: - 降级 API 版本至 `policy/v1beta1`(临时方案)。 - 升级集群至 1.21+(推荐方案)。 - 使用适配的 Calico 版本(如 v3.19)。 --- ### **相关问题** 1. Kubernetes 1.19 如何手动验证 API 兼容性? 2. 升级 Kubernetes 集群时如何避免网络插件(如 Calico)中断? 3. `policy/v1beta1` 在 Kubernetes 1.25+ 中被移除后如何迁移? : 参考 Calico 版本兼容性文档。 [^3]: Kubernetes API 版本变更记录。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值