[力扣每日一练]根据长度划分三角形(逻辑遍历判断每行,返回新的判断值)

题目要求:

表:Triangles

+-------------+------+ 
| Column Name | Type | 
+-------------+------+ 
| A           | int  | 
| B           | int  |
| C           | int  |
+-------------+------+
(A, B, C) 是这张表的主键。
每一行包含三角形三边的长度。
编写一个查询来找到 三角形 的类型。对于每一行输出下面的其中一个:

Equilateral:3 边长度相同的三角形。
Isosceles:2 边长度相同的三角形。
Scalene:3 边长度不同的三角形。
Not A Triangle:给定的 A ,B,C 的值不能形成三角形。
以 任何顺序 返回结果表。

结果格式如下所示。

 

示例 1:

输入: 
Triangles 表:
+----+----+----+
| A  | B  | C  |
+----+----+----+
| 20 | 20 | 23 |
| 20 | 20 | 20 |
| 20 | 21 | 22 |
| 13 | 14 | 30 |
+----+----+----+
输出: 
+----------------+
| triangle_type  | 
+----------------+
| Isosceles      | 
| Equilateral    |
| Scalene        |
| Not A Triangle |
+----------------+
解释: 
- 第一行的值形成了等腰三角形,因为 A = B。
- 第二行的值形成了等边三角形,因为 A = B = C.
- 第三行的值形成了斜三角形,因为 A != B != C.
- 第四行中的值不能形成三角形,因为边 A 和边 B 的和不大于边 C。

MySQL解法:

首先一共有四个条件判断,要求返回判断的值,并且将这些值返回到一个新的名为:“triangle_type  ”数据框。面对这种情况,可以使用流程判断函数case when来进行解释,最后将返回的逻辑判断值命名为triangle_type 即可完成赋值到新表的操作:

# Write your MySQL query statement below
#经典的MySQL的逻辑判断返回新值,并且保存到新的表中。这个逻辑返回值可以利用case when来表示
SELECT 
CASE
    WHEN A+B<=C OR A+C<=B OR B+C<=A THEN 'Not A Triangle'
    WHEN A = B AND B = C THEN 'Equilateral'
    WHEN A = B OR A = C OR B = C THEN 'Isosceles'
    WHEN A != B AND A != C AND B != C THEN 'Scalene'
END AS triangle_type  
FROM Triangles

PANDAS解法:

知道了MySQL的解法后,逻辑便知晓了,接下来把这套逻辑以python的形式表达出来即可:

首先设置一共外置的自定义函数,转码由来进行逻辑判断,返回判断值

然后新建一个空表格,就是triangle_type 表

最后再空表格内新建一列,再将原数据表通过apply函数遍历传入自定义函数,将遍历函数返回的结果赋值给该列即可:

import pandas as pd

def type_of_triangle(triangles: pd.DataFrame) -> pd.DataFrame:
    # 自定义逻辑判断函数
    def panduan(row):
        # 检查是否不是三角形
        if row['A'] + row['B'] <= row['C'] or row['A'] + row['C'] <= row['B'] or row['B'] + row['C'] <= row['A']:
            return 'Not A Triangle'
        # 检查是否是等边三角形
        if row['A'] == row['B'] and row['B'] == row['C']:
            return 'Equilateral'
        # 检查是否是等腰三角形
        if row['A'] == row['B'] or row['B'] == row['C'] or row['A'] == row['C']:
            return 'Isosceles'
        # 否则是不等边三角形
        return 'Scalene'
    #这里新建一个数据框,来保存之后逻辑判断的结构
    triangle_type = pd.DataFrame()
    #再新建的数据框中添加一个新列triangle_type,通过apply函数的方式遍历传入triangles表的自定义判断函数,按行输出
    triangle_type['triangle_type'] = triangles.apply(panduan, axis=1)
    return triangle_type

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值