python - 从 float 中创建一个带有全星和半星的命令行星级? python 3

标签 python logic

所以我正在开发一个获取酒店详细信息的命令行应用程序,其中一个详细信息是他们的“星级”。我可以只列出我得到的字符串,但这一点都不好玩,我希望应用程序真的看起来不错。所以我想自己创建星级的外观。

我当时并不知道,这可能比我想象的需要更多的数学知识(它甚至可以成为一个很好的面试问题)。

详情如下:

  • 我传递的数据如下所示:3.7 stars
  • 我想得到一个最接近的估计值,在此 3.5 就足够了。
  • 我将它作为字符串返回,应该类似于“++-”,其中“+”表示满星,“-”表示半星

到目前为止我的代码:

def format_hotel_rating(self, rating):
    rating_as_num = float(rating[:3])  # rating => "3.7 stars"

    for i in range(0, new_rating * 10):
        if i % 10 == 0:
            new_rating += "+"

        # still missing half star logic

到目前为止,我的逻辑是这样的:

  • 取小数并将其乘以 10(因此可以更轻松地对其进行迭代)
  • 每第 10 次迭代,添加一个满星
  • 当不能再有 10 的倍数时,计算最后一个 10 的倍数和最后一次迭代之间的每次次迭代
  • 例如 10(满星)、20(满星)、30(满星)、31、32、33、34、35、36、37
  • 然后,确定 37 是否更接近于 3540。如果接近 35,则附加半星“-”,否则如果接近 40,则附加全星“+”

几个小时以来,我一直在努力在脑海中解决这个问题(我想我什至无法通过自己的面试),但我还没有找到任何成功的方法。

我怎样才能做到这一点?

最佳答案

为什么不通过纯粹在浮点域中工作来替换最后一个 for 循环?

pure_rating = int(rating_as_num)
decimal_part = rating_as_num - pure_rating
final_score = "+" * pure_rating
if decimal_part >= 0.75:
   final_score += "+"
elif decimal_part >= 0.25:
   final_score += "-"

第一行找到评分的整数部分 (3.7 -> 3)。

第二行通过减去两个找到小数部分。 (3.7 - 3 -> 0.7)

最后,您首先创建 pure_rating"+" 个字符。然后根据小数部分添加"+""-"(无论是在0.5-0.75范围还是0.75- 0.99 范围)

关于python - 从 float 中创建一个带有全星和半星的命令行星级? python 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32190909/

相关文章:

python - 如何在 python 中检索 julia 存储在 .jld 文件中的稀疏矩阵?

python - 从字符串中删除括号和特殊字符并转换列表(值以逗号分隔)

c - 在我的 Eclipse 中运行此 fork 代码时出错,并且此代码也存在一些概念混淆

python numpy `np.take` 与二维数组

Python 从 yaml 配置文件解释正则表达式

java - 无法将 Integer 更改为 Double,这会导致我的代码失败

Java 逻辑 AND 与 IF

Prolog:游戏中的每个玩家都打出一张牌。在知道谁打了哪些牌的情况下,推断出谁打了其他牌

python - 如何使用正则表达式提取字符串之间的数字

Python 图像与 numpy 切片的卷积在某些图像上产生奇怪的结果