class TemperatureConverter:
def __init__(self): self.conversion_factors = { 'CtoF': (lambda c: c * 9/5 + 32), 'FtoC': (lambda f: (f - 32) * 5/9), 'CtoK': (lambda c: c + 273.15), 'KtoC': (lambda k: k - 273.15), 'FtoK': (lambda f: (f - 32) * 5/9 + 273.15), 'KtoF': (lambda k: (k - 273.15) * 9/5 + 32) }def convert(self, value, from_unit, to_unit): key = from_unit + 'to' + to_unit if key in self.conversion_factors: return self.conversion_factors[key](value) else: raise ValueError("Invalid conversion units")
converter = TemperatureConverter()
print(converter.convert(100, 'C', 'F')) # 期望输出: 212.0
print(converter.convert(32, 'F', 'C')) # 期望输出: 0.0
print(converter.convert(0, 'C', 'K')) # 期望输出: 273.15
print(converter.convert(273.15, 'K', 'C')) # 期望输出: 0.0
print(converter.convert(100, 'C', 'K')) # 期望输出: 373.15
print(converter.convert(-40, 'F', 'C')) # 期望输出: -40.0
print(converter.convert(-273.15, 'C', 'K')) # 期望输出: 0.0
print(converter.convert(100, 'C', 'X')) # 期望输出: ValueError
上面的代码定义了一个温度转换器类 TemperatureConverter,它可以在摄氏度(C)、华氏度(F)和开尔文(K)之间进行转换。请给出优化建议:
存在的问题如下:
为了增强 TemperatureConverter
类的输入验证和错误处理,进行以下优化:
from_unit
和 to_unit
是有效的单位。下面是改进后的代码:
class TemperatureConverter: def __init__(self): self.conversion_factors = { 'CtoF': (lambda c: c * 9 / 5 + 32), 'FtoC': (lambda f: (f - 32) * 5 / 9), 'CtoK': (lambda c: c + 273.15), 'KtoC': (lambda k: k - 273.15), 'FtoK': (lambda f: (f - 32) * 5 / 9 + 273.15), 'KtoF': (lambda k: (k - 273.15) * 9 / 5 + 32) } self.valid_units = {'C', 'F', 'K'} def validate_input(self, value, from_unit, to_unit): if not isinstance(value, (int, float)): raise TypeError("Value must be a number") if from_unit not in self.valid_units or to_unit not in self.valid_units: raise ValueError(f"Invalid conversion units: {from_unit} to {to_unit}") if from_unit == 'K' and value < 0: raise ValueError("Kelvin temperature cannot be negative") def convert(self, value, from_unit, to_unit): self.validate_input(value, from_unit, to_unit) key = from_unit + 'to' + to_unit if key in self.conversion_factors: result = self.conversion_factors[key](value) if to_unit == 'K' and result < 0: raise ValueError("Resulting temperature in Kelvin cannot be negative") return result else: raise ValueError("Conversion from {} to {} is not supported".format(from_unit, to_unit))# 测试代码converter = TemperatureConverter()# 测试转换print(converter.convert(100, 'C', 'F')) # 期望输出: 212.0print(converter.convert(32, 'F', 'C')) # 期望输出: 0.0print(converter.convert(0, 'C', 'K')) # 期望输出: 273.15print(converter.convert(273.15, 'K', 'C')) # 期望输出: 0.0# 复杂场景测试print(converter.convert(100, 'C', 'K')) # 期望输出: 373.15print(converter.convert(-40, 'F', 'C')) # 期望输出: -40.0print(converter.convert(-273.15, 'C', 'K')) # 期望输出: 0.0# 错误处理测试try: print(converter.convert("hundred", 'C', 'F')) # 期望输出: TypeErrorexcept Exception as e: print(e)try: print(converter.convert(-300, 'C', 'K')) # 期望输出: ValueErrorexcept Exception as e: print(e)try: print(converter.convert(100, 'C', 'X')) # 期望输出: ValueErrorexcept Exception as e: print(e)
validate_input
方法检查 value
是否为数字,并验证单位是否有效。validate_input
方法中检查 from_unit
和 to_unit
是否在有效单位集合中。convert
方法中进一步细化了错误消息,使其更加清晰。to_unit
为 K
,确保结果不会为负。通过改进,TemperatureConverter
类现在更加健壮,可以更好地处理无效输入和极端值。
为了增强 TemperatureConverter 类的输入验证和错误处理,可以进行以下优化:
输入值验证:
convert
方法中,增加对 value
的类型检查,确保它是一个数字类型。try-except
块捕获潜在的异常,如 TypeError
,并提供有意义的错误消息。边界条件处理:
错误处理:
ValueError
包含足够的信息来描述问题。convert
方法的开始处检查单位的有效性,如果无效则立即抛出异常。性能优化:
下面是根据上述建议修改后的 TemperatureConverter
类:
class TemperatureConverter: def __init__(self): self.conversion_factors = { 'CtoF': (lambda c: c * 9/5 + 32), 'FtoC': (lambda f: (f - 32) * 5/9), 'CtoK': (lambda c: c + 273.15), 'KtoC': (lambda k: k - 273.15), 'FtoK': (lambda f: (f - 32) * 5/9 + 273.15), 'KtoF': (lambda k: (k - 273.15) * 9/5 + 32) } def convert(self, value, from_unit, to_unit): if not isinstance(value, (int, float)): raise ValueError("Invalid input value. Expected a number.") key = from_unit + 'to' + to_unit if key not in self.conversion_factors: raise ValueError(f"Invalid conversion units: from {from_unit} to {to_unit}") return self.conversion_factors[key](value)# 测试代码(保持不变)
注意,我们增加了对 value
的类型检查,并在单位无效时提供了一个更详细的错误信息。这样,代码在面临非法输入时会更健壮,并能够提供更清晰的错误信息。
我试图找到一个完整的模式列表,用于通过HTML5表单验证各种类型的输入,特别是、、等等,但我找不到任何模式。目前,这些输入验证的内置版本远非完美(甚至不检查输入的内容是否是电话号码)。所以我想知道,我可以使用哪些模式来验证用户在输入中输入了正确的格式? 以下是一些默认验证允许不允许的输入的例子: 这个字段允许在@后面有不正确域的电子邮件,它允许地址以破折号或句号开始或结束,这也是不允许的。因此,是
10倍验证精度得分:{0.7982993,0.6793838等(共10倍)}K倍平均精度得分:0.78679979 实际错误:
问题内容: Python如何接受用户输入,并验证? 问题答案: 完成此操作的最简单方法是将方法置于循环中。当输入错误时使用,当你感到满意时使用。 当你的输入可能引发异常时 使用和检测用户何时输入了无法解析的数据。 实施你自己的验证规则 如果要拒绝Python可以成功解析的值,则可以添加自己的验证逻辑。 结合异常处理和自定义验证 以上两种技术都可以组合成一个循环。 将其全部封装在一个函数中 如果你需
根据经验,您永远不应该信任从最终用户收到的数据, 并且应该在充分利用之前对其进行验证。 要给 model 填充其所需的用户输入数据,你可以调用 yii\base\Model::validate() 方法验证它们。该方法会返回一个布尔值,指明是否通过验证。若没有通过,你能通过 yii\base\Model::$errors 属性获取相应的报错信息。比如, $model = new \app\mode
我正在使用一个旋转控制器来接受整数值。如何限制输入只接受整数?目前,当输入字符串值时,我会在控制台中得到错误消息。我不想让纺纱机接受任何其他类型-例如。双或串。 另外,如何在旋转器上实现错误处理?
问题内容: 我是从记录用户输入使用。我需要验证输入内容,例如: 必须为非负数 它必须是字母 …等等 最好的方法是什么? 问题答案: 示例1:验证正整数 这是一个用于int从输入中验证肯定的简单示例。 结果: 请注意,与更详细组合相比,使用起来要容易得多。通过合同,一个 保证,如果它,然后将安静地给你int,并不会引发任何。 示例2:同一令牌上有多个 请注意,上面的代码段包含一个语句,以使Scann