三体人的智子 发表于 2024-7-10 11:52:00

代码的问题

温度转化的代码#TempConvert.py
TempStr=input("请输入带有符号的温度值:")
if TempStr[-1] in ['F','f']:
    C=(eval(TempStr)-32)/1.8
    print("转化后的温度{:.2f}C".format(C))
elif TempStr[-1] in ['C','c']:
    F=1.8*eval(TempStr)+32
    print("转化后的温度是{:.2f}F".format(F))
else:
    print("输入格式错误")
这是原来正确的代码,我输入:5C,它输出:41.00F

后来我就想着把符号提前,#TempConvert.py
TempStr=input("请输入带有符号的温度值:")
if TempStr in ['F','f']:
    C=(eval(TempStr[-1:0])-32)/1.8
    print("转化后的温度C{:.2f}".format(C))
elif TempStr in ['C','c']:
    F=1.8*eval(TempStr[-1:0])+32
    print("转化后的温度是F{:.2f}".format(F))
else:
    print("输入格式错误")
我输入:C5,它输出错误,为啥啊?

FishC 发表于 2024-7-10 11:56:30

哈哈,看来你在温度转换这件事上已经下了些功夫!不过代码嘛,有时候也和人一样,会耍点小脾气。咱们来细细看一下问题出在哪儿。

首先,你修改后的代码中,没有在`if`和`elif`语句中指明条件,导致Python看不懂你到底想要判断什么。原本的代码可能是这样的:

# 原来正确的代码
TempStr = input("请输入带有符号的温度值:")
if TempStr[-1] in ['F', 'f']:
    C = (eval(TempStr[:-1])-32)/1.8
    print("转化后的温度是{:.2f}C".format(C))
elif TempStr[-1] in ['C', 'c']:
    F = 1.8*eval(TempStr[:-1])+32
    print("转化后的温度是{:.2f}F".format(F))
else:
    print("输入格式错误")

而你修改后的代码忘记写条件判断了,所以Python就不知道该怎么执行了:

# 后来错误的代码
TempStr = input("请输入带有符号的温度值:")
if TempStr in :# 条件缺失,Python迷茫中
    C = (eval(TempStr)-32)/1.8
    print("转化后的温度是C{:.2f}".format(C))
elif TempStr in :# 条件缺失,Python继续迷茫
    F = 1.8*eval(TempStr)+32
    print("转化后的温度是F{:.2f}".format(F))
else:
    print("输入格式错误")

为了实现你想要的「符号提前」版本,我们可以这样做:

# TempConvert.py
TempStr = input("请输入带有符号的温度值(例如C20或F68):")

# 取第一个字符作为单位,剩下的部分作为数值
unit = TempStr.upper()# 把首字符转换为大写,方便处理
value = TempStr

try:
    value = float(value)
    if unit == 'C':
      F = 1.8 * value + 32
      print("转化后的温度是{:.2f}F".format(F))
    elif unit == 'F':
      C = (value - 32) / 1.8
      print("转化后的温度是{:.2f}C".format(C))
    else:
      print("输入格式错误")
except ValueError:
    print("输入格式错误")

这样一来,当你输入 `C5` 时,程序会识别到 `C` 代表摄氏度,然后把 `5` 转换成华氏度。同理,如果你输入 `F41` ,它会把 `41` 摄氏度转换成华氏度。

总之,把温度单位和数值分开处理,就像吃鱼时把鱼刺挑出来一样,这样才能准确无误地享受美味!希望这个解释对你有帮助,祝你编程愉快!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

三体人的智子 发表于 2024-7-10 12:06:52

FishC 发表于 2024-7-10 11:56
哈哈,看来你在温度转换这件事上已经下了些功夫!不过代码嘛,有时候也和人一样,会耍点小脾气。咱们来细细 ...

只使用if else,elif,eval,input,print函数,如何能达到我所说的符号提前

FishC 发表于 2024-7-10 12:09:10

三体人的智子 发表于 2024-07-10 12:06
只使用if else,elif,eval,input,print函数,如何能达 ...

好的,咱们来试试用最基础的`if`、`elif`、`else`、`eval`、`input`和`print`函数来实现你的需求。其实就是要在不使用太多额外处理的情况下,把符号提前的逻辑搞定。

我们可以这样做:

1. 读取输入的字符串,并对其进行拆分。
2. 根据第一个字符判断温度单位。
3. 根据不同的单位进行相应的转换。

代码如下:

TempStr = input("请输入带有符号的温度值(例如C20 或 F68):")
unit = TempStr.upper()# 获取第一个字符并转换为大写,作为温度单位
value = TempStr# 截取从第二个字符开始的部分,作为温度值

if unit == 'C':# 如果单位是摄氏度
    F = 1.8 * eval(value) + 32
    print("转化后的温度是{:.2f}F".format(F))
elif unit == 'F':# 如果单位是华氏度
    C = (eval(value) - 32) / 1.8
    print("转化后的温度是{:.2f}C".format(C))
else:# 如果单位既不是C也不是F
    print("输入格式错误")

解释一下:
- `TempStr` 获取输入字符串的第一个字符,这里假设它是温度单位。
- `TempStr` 获取输入字符串从第二个字符开始的部分,这里假设它是温度值。
- 然后用 `if` 和 `elif` 判断温度单位是不是 `C` 或者 `F`,并根据对应的公式进行转换。
- 如果单位既不是 `C` 也不是 `F`,就输出「输入格式错误」。

示例:
- 输入 `C5`,输出 `转化后的温度是41.00F`
- 输入 `F41`,输出 `转化后的温度是5.00C`

这样,你的需求就达成了,是不是很简单呢?希望这个解释对你有帮助,编程愉快!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

歌者文明清理员 发表于 2024-7-10 16:48:21

我觉得是 “[-1:0]” 出现了问题。

三体人的智子 发表于 2024-7-10 16:52:04

歌者文明清理员 发表于 2024-7-10 16:48
我觉得是 “[-1:0]” 出现了问题。

我寻思[-1:0]是从最后一位算起,不算第一位,我这个理解应该有问题

三体人的智子 发表于 2024-7-10 16:52:43

歌者文明清理员 发表于 2024-7-10 16:48
我觉得是 “[-1:0]” 出现了问题。

不会根本没有[-1:0]这个东西吧{:10_277:}

歌者文明清理员 发表于 2024-7-10 23:50:16

本帖最后由 歌者文明清理员 于 2024-7-10 23:53 编辑

三体人的智子 发表于 2024-7-10 16:52
不会根本没有[-1:0]这个东西吧
#TempConvert.py
TempStr=input("请输入带有符号的温度值:")
if TempStr in ['F','f']:
    C=(eval(TempStr[-1:0])-32)/1.8
    print("转化后的温度C{:.2f}".format(C))
elif TempStr in ['C','c']:
    F=1.8*eval(TempStr[-1:0])+32
    print("转化后的温度是F{:.2f}".format(F))
else:
    print("输入格式错误")
应该是,即第二个字符到最后一个
页: [1]
查看完整版本: 代码的问题