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

如何用Python判断用户输入的边与角是否构成菱形或正方形

问题解决:判断四边形是否为菱形/正方形

原代码存在的问题

  • 菱形判断逻辑无效:sList == sList恒成立,无实际判定作用;且出现列表索引越界(aList[4]不存在,Python列表索引从0开始)
  • 正方形判断逻辑错误:错误将边长列表与角度列表直接对比,完全不符合判定规则
  • 输入验证不严谨:仅检查一次负数输入,若用户再次输入负数会直接存入非法值

核心判断逻辑(列表元素匹配方法)

菱形判定(按给定条件)

  • 四条边全部相等:用all(side == sList[0] for side in sList)遍历检查所有边是否与第一条边相等
  • 角1等于角3:对应列表索引aList[0] == aList[2]
  • 角2等于角4:对应列表索引aList[1] == aList[3]

正方形判定(按给定条件)

  • 四条边全部相等:同上
  • 四个角全部相等:用all(angle == aList[0] for angle in aList)遍历检查所有角是否与第一个角相等

修正后的代码

while True:
    # 输入边长并验证(确保输入有效正数)
    print("=== Please enter Sides ===\n")
    sList = []
    for i in range(4):
        while True:
            try:
                side = float(input(f"Please enter side {i + 1}: "))
                if side <= 0:
                    print("Value must be positive!")
                    continue
                sList.append(side)
                break
            except ValueError:
                print("Invalid input! Please enter a number.")
    
    # 输入角度并验证(确保输入有效正数)
    print("\n=== Please enter angles ===\n")
    aList = []
    for i in range(4):
        while True:
            try:
                angle = float(input(f"Please enter angle {i + 1}: "))
                if angle <= 0:
                    print("Value must be positive!")
                    continue
                aList.append(angle)
                break
            except ValueError:
                print("Invalid input! Please enter a number.")
    
    print("\n=======================")
    
    # 判定逻辑
    all_sides_equal = all(side == sList[0] for side in sList)
    rhombus_angle_check = (aList[0] == aList[2]) and (aList[1] == aList[3])
    all_angles_equal = all(angle == aList[0] for angle in aList)
    
    is_square = all_sides_equal and all_angles_equal
    is_rhombus = all_sides_equal and rhombus_angle_check and not is_square
    
    if is_square:
        print("This is a square!\n")
    elif is_rhombus:
        print("This is a rhombus!\n")
    else:
        print("This is neither a rhombus nor a square.\n")
    
    keep = input("Would you like to repeat? (1-Yes, 2-No): ")
    if keep != '1':
        break

说明

  • 输入验证用嵌套循环+异常处理,确保用户输入的是合法正数
  • 用all()函数批量遍历列表元素,简洁实现“所有元素符合条件”的判定
  • 先判断正方形(正方形是特殊的菱形),避免重复判定逻辑冲突

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 08:00:53