You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用浮点值取整后的整数查找字典中的浮点型键

问题分析

你现在的核心需求是:原本用随机浮点数作为字典键存储平面坐标,现在想通过取整后的整数来查找对应的坐标(比如用整数10找到键为10.3的坐标)。现有代码的问题在于:字典的键是原始浮点数,直接用整数查找会失败;同时生成随机数时,numbers列表存的是取整后的整数,但字典键是未取整的浮点数,两者没有关联。

解决方案

根据你是否允许多个浮点数取整后对应同一个整数,提供两种方案:

方案1:每个整数对应唯一浮点数键

如果要求取整后的整数不重复(即每个整数只对应一个坐标),可以新增一个反向映射字典,把整数映射到对应的浮点数键,这样就能快速查找:

修改后的完整代码

import random  # 记得导入random模块

x_amount = int(input("Height of room: "))
y_amount = int(input("Width of room: "))

Room_Total = x_amount * y_amount
numbers = []
length = len(str(Room_Total)) + 1
x_values = {}
y_values = {}
int_to_float = {}  # 新增:存储整数到浮点数键的映射
create_number = y_amount

def num_find(target_int):
    if target_int in int_to_float:
        float_key = int_to_float[target_int]
        x_coord = x_values[float_key]
        y_coord = y_values[float_key]
        print(f"找到坐标:x={x_coord}, y={y_coord}")
    else:
        print(f"不存在整数{target_int}对应的点")

for num in range(1, y_amount + 1):
    for n in range(1, x_amount + 1):
        number = 1
        while number != 0:
            number = random.uniform(1, Room_Total)
            int_num = round(number)
            # 确保浮点数键和取整后的整数都不重复
            if number not in numbers and int_num not in int_to_float:
                numbers.append(number)
                int_to_float[int_num] = number
                x_values[number] = num
                y_values[number] = n
                number = 0

plane = input("Want to see the plane? y/n ")
if plane == "y":
    create_number = y_amount  # 重置变量,避免之前循环影响
    for i in numbers:
        num_gap = length - len(str(round(i)))  # 用取整后的数计算长度
        create_number -= 1
        if create_number == -1:
            print("")
            create_number = y_amount - 1
            print(round(i), end="  ")
            for _ in range(num_gap):
                print(" ", end="")
        else:
            print(round(i), end="  ")
            for _ in range(num_gap):
                print(" ", end="")

方案2:允许多个浮点数取整后对应同一个整数

如果允许多个坐标的浮点数键取整后是同一个整数,只需修改num_find函数,遍历所有键判断匹配即可:

修改后的num_find函数

def num_find(target_int):
    matched_coords = []
    # 遍历所有浮点数键,判断取整后是否匹配目标整数
    for float_key in x_values:
        if round(float_key) == target_int:
            matched_coords.append((x_values[float_key], y_values[float_key]))
    
    if matched_coords:
        print(f"找到{len(matched_coords)}个匹配坐标:{matched_coords}")
    else:
        print(f"没有找到整数{target_int}对应的点")
注意事项
  • 原有代码中打印网格的部分存在缩进错误(else的缩进层级不正确),已在方案1的代码中修正
  • 生成随机数时,random.uniform(1, Room_Total)生成的是[1, Room_Total)区间的浮点数,如果需要包含Room_Total,可以改用random.uniform(1, Room_Total+1)

内容的提问来源于stack exchange,提问作者Eutopia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 01:12:37