如何用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
相关产品推荐
相关产品推荐

