鱼C论坛

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

[已解决]关于“字符串”重复转换的一个问题(不要以为很简单)

[复制链接]
发表于 2022-2-6 03:45:31 | 显示全部楼层 |阅读模式

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

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

x
我最近写代码发现一个问题,为啥要多次给一个变量进行转换呢?不大明白,还是直接上代码吧!
'''
#手机店打折,星期二10:00-11:00和星期五14:00-15:00可以享受折扣;
#由客户输入今天星期几,并确认值是否合法;输入小时,并确认是否合法;不合法需重新输入;
#若合法,则看是否满足条件,满足输出“恭喜……”;不满足,输出“很遗憾……”;
#要做到不合法内容时候的合理提示。
'''


print('\n手机店正在打折,活动进行中……\n')

#异常处理校验

#异常一、校验输入的星期是否合法,并直到输入合法内容
week_string = ["星期一","星期二","星期三","星期四","星期五","星期六","星期日"]
strWeek = input("请输入今天的星期(例如星期二):")

while not (strWeek  in week_string):
    print("\n请输入合法中文星期,谢谢配合!")
    strWeek = input("请输入今天的中文星期(例如星期二):")
    if strWeek  in week_string:
        continue
    
    
#异常二、校验输入的时间是否合法,并直到输入合法内容
time_list = [
    '0','1','2','3','4','5','6',
    '7','8','9','10','11','12',
    '13','14','15','16','17','18',
    '19','20','21','22','23']
intTime = input("\n请输入进店时间(范围:0~23):")

while not (intTime in time_list):
    print("\n请输入0~23之间的数字,谢谢配合!")
    intTime = input("您于"+strWeek+"的进店时间(范围:0~23):")        
    if  intTime.isdigit():
        intTime = int(intTime)
        if intTime >=0 and intTime <=23:
            break

    

#看看合法的星期和时间是否满足折扣要求
intTime = int(intTime)        #???为啥之前没有这句话没有出错,后来就出错了?
if (strWeek == "星期二" and 11 >= intTime >= 10 ) \
    or(strWeek == "星期五" and 15 >= intTime >= 14 ):
    print("\n恭喜你,获得了折扣参与资格,请快快选购吧!")
else:
    print("\n很遗憾,"+strWeek+"的"+str(intTime)+"时活动结束,敬请期待下次活动……")

这里,最后倒数那几行,我用#符号提出来的问题,一直没有想明白,我之前已经转换为INT型了,为啥还需要转换一次?
(PS:请大神给我的代码优化一下呗,总感觉太冗余啰嗦了!谢谢)
谢谢各位鱼友帮忙解答,谢谢!
最佳答案
2022-2-6 04:29:12
本帖最后由 qq1151985918 于 2022-2-6 05:06 编辑

如果没有那一行代码,当你输入的时间不满足  not (intTime in time_list)
也就是说输入0-23就不会进入while直接进行判断所以会报错
而输入其他就不会报错
因为进入while循环后输出的都经过 intTime = int(intTime) 转换格式
week_string = ["星期一","星期二","星期三","星期四","星期五","星期六","星期日"]
time_list = [str(i) for i in range(24)]

def input_format(target, data, note):
    tar = input(f"请输入{target}({note}):")
    while tar not in data:
        print(f"\n请输入合法{target},谢谢配合!")
        tar = input(f"请输入{target}({note}):")
    return int(tar) if tar.isdigit() else tar

def isOnSale(week, time):
    if week == "星期二" and 11 >= time >= 10:
        return True
    elif week == "星期五" and 15 >= time >= 14:
        return True
    else:
        return False
    
if __name__ == "__main__":
    print('\n手机店正在打折,活动进行中……\n')
    strWeek = input_format("星期", week_string, "例如星期二")
    intTime = input_format("时间", time_list, "范围:0~23")
    if isOnSale(strWeek, intTime):
        print("\n恭喜你,获得了折扣参与资格,请快快选购吧!")
    else:
        print("\n很遗憾,"+strWeek+"的"+str(intTime)+"时活动结束,敬请期待下次活动……")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-2-6 03:47:52 | 显示全部楼层
补充说明:其实就是44行代码那块,我明明在37行已经进行了变量类型转换,为啥还需要44行的强制转换呢?否则就报错,谢谢啦!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-6 04:29:12 | 显示全部楼层    本楼为最佳答案   
本帖最后由 qq1151985918 于 2022-2-6 05:06 编辑

如果没有那一行代码,当你输入的时间不满足  not (intTime in time_list)
也就是说输入0-23就不会进入while直接进行判断所以会报错
而输入其他就不会报错
因为进入while循环后输出的都经过 intTime = int(intTime) 转换格式
week_string = ["星期一","星期二","星期三","星期四","星期五","星期六","星期日"]
time_list = [str(i) for i in range(24)]

def input_format(target, data, note):
    tar = input(f"请输入{target}({note}):")
    while tar not in data:
        print(f"\n请输入合法{target},谢谢配合!")
        tar = input(f"请输入{target}({note}):")
    return int(tar) if tar.isdigit() else tar

def isOnSale(week, time):
    if week == "星期二" and 11 >= time >= 10:
        return True
    elif week == "星期五" and 15 >= time >= 14:
        return True
    else:
        return False
    
if __name__ == "__main__":
    print('\n手机店正在打折,活动进行中……\n')
    strWeek = input_format("星期", week_string, "例如星期二")
    intTime = input_format("时间", time_list, "范围:0~23")
    if isOnSale(strWeek, intTime):
        print("\n恭喜你,获得了折扣参与资格,请快快选购吧!")
    else:
        print("\n很遗憾,"+strWeek+"的"+str(intTime)+"时活动结束,敬请期待下次活动……")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-6 11:22:23 | 显示全部楼层
15631604474 发表于 2022-2-6 03:47
补充说明:其实就是44行代码那块,我明明在37行已经进行了变量类型转换,为啥还需要44行的强制转换呢?否则 ...

你要学习的模块为:  变量的作用域。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-7 14:56:45 | 显示全部楼层
代码判断的时候判断不同的变量类型就会给出不同的判判断有时候会报错,所以要进行多次的转换,所以给我一个最佳答案,行不行?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-2-9 00:10:21 | 显示全部楼层
z5560636 发表于 2022-2-6 11:22
你要学习的模块为:  变量的作用域。

谢谢了,那我就再次复习一下,感谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-2-9 00:11:13 | 显示全部楼层
shiyouroc 发表于 2022-2-7 14:56
代码判断的时候判断不同的变量类型就会给出不同的判判断有时候会报错,所以要进行多次的转换,所以给我一个 ...

一起寻找吧,我也再反复琢磨中
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-2-9 00:11:53 | 显示全部楼层
qq1151985918 发表于 2022-2-6 04:29
如果没有那一行代码,当你输入的时间不满足  not (intTime in time_list)
也就是说输入0-23就不会进入whi ...

感谢,我也在想用函数,没想到大神先一步,厉害,感谢啦!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 13:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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