鱼C论坛

 找回密码
 立即注册
查看: 201|回复: 7

[已解决]代码的问题

[复制链接]
发表于 2024-7-10 11:52:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

后来我就想着把符号提前,
#TempConvert.py
TempStr=input("请输入带有符号的温度值:")
if TempStr[0] in ['F','f']:
    C=(eval(TempStr[-1:0])-32)/1.8
    print("转化后的温度C{:.2f}".format(C))
elif TempStr[0] in ['C','c']:
    F=1.8*eval(TempStr[-1:0])+32
    print("转化后的温度是F{:.2f}".format(F))
else:
    print("输入格式错误")
我输入:C5,它输出错误,为啥啊?
最佳答案
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[0].upper()  # 获取第一个字符并转换为大写,作为温度单位
value = TempStr[1:]  # 截取从第二个字符开始的部分,作为温度值

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

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

这样,你的需求就达成了,是不是很简单呢?希望这个解释对你有帮助,编程愉快!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[0].upper()  # 把首字符转换为大写,方便处理
value = TempStr[1:]

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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

只使用if else,elif,eval,input,print函数,如何能达到我所说的符号提前
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[0].upper()  # 获取第一个字符并转换为大写,作为温度单位
value = TempStr[1:]  # 截取从第二个字符开始的部分,作为温度值

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

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

这样,你的需求就达成了,是不是很简单呢?希望这个解释对你有帮助,编程愉快!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-10 16:48:21 | 显示全部楼层
我觉得是 “[-1:0]” 出现了问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-7-10 16:52:04 | 显示全部楼层
歌者文明清理员 发表于 2024-7-10 16:48
我觉得是 “[-1:0]” 出现了问题。

我寻思[-1:0]是从最后一位算起,不算第一位,我这个理解应该有问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

 楼主| 发表于 2024-7-10 16:52:43 | 显示全部楼层
歌者文明清理员 发表于 2024-7-10 16:48
我觉得是 “[-1:0]” 出现了问题。

不会根本没有[-1:0]这个东西吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-10 23:50:16 | 显示全部楼层
本帖最后由 歌者文明清理员 于 2024-7-10 23:53 编辑
三体人的智子 发表于 2024-7-10 16:52
不会根本没有[-1:0]这个东西吧

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

应该是[1:],即第二个字符到最后一个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-15 22:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表