鱼C论坛

 找回密码
 立即注册
查看: 2012|回复: 2

[已解决]求助代码问题

[复制链接]
发表于 2023-8-27 13:12:47 | 显示全部楼层 |阅读模式

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

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

x
这个代码哪里错了?
# 题目要求:
# 请在此处补充装饰器 type_check() 的代码
def type_check(func):
    if func == int:
        if type(x) == "int":
            print(double(x))
        elif:
            print("参数类型错误!")
    elif func == str:
        if type(x) == "str":
            print(upper(x))
        elif:
            print("参数类型错误!")

print("<<<--- 测试整数 --->>>")

@type_check(int)
def double(x):
    return x * 2

print(double(2))      # 这里打印结果应该是 4
print(double("2"))    # 这里打印结果应该是 “参数类型错误”


print("\n<<<--- 测试字符串 --->>>")

@type_check(str)
def upper(s):
    return s.upper()

print(upper('I love FishC.'))   # 这里打印结果应该是 I LOVE FISHC
print(upper(250))               # 这里打印结果应该是 “参数类型错误”
最佳答案
2023-8-27 13:13:02
代码中存在一些错误和问题,下面是我对代码进行修改的建议:

1. 在 type_check 函数中,判断 func 是否为 intstr 时,应该使用 is 运算符而不是比较运算符 ==,同时在判断类型时应该使用 type() 函数,而不是直接与字符串比较。

2. elif 语句缺少条件表达式。

3. 在 type_check 函数中,应该将传入的参数 x 作为函数的参数进行处理,而不能直接引用。

4. 装饰器应该在函数定义之前使用 @ 符号进行装饰,而不是在调用函数时进行。

下面是修改后的代码:
def type_check(func):
    def decorator(x):
        if func is int:
            if type(x) is int:
                print(double(x))
            else:
                print("参数类型错误!")
        elif func is str:
            if type(x) is str:
                print(upper(x))
            else:
                print("参数类型错误!")
    return decorator

@type_check(int)
def double(x):
    return x * 2

@type_check(str)
def upper(s):
    return s.upper()

print("<<<--- 测试整数 --->>>")
double(2)      # 这里打印结果应该是 4
double("2")    # 这里打印结果应该是 “参数类型错误”

print("\n<<<--- 测试字符串 --->>>")
upper('I love FishC.')   # 这里打印结果应该是 I LOVE FISHC
upper(250)              # 这里打印结果应该是 “参数类型错误”

请注意,以上修改仅是根据你提供的代码进行推测,可能还需要根据实际需求进一步调整。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-27 13:13:02 | 显示全部楼层    本楼为最佳答案   
代码中存在一些错误和问题,下面是我对代码进行修改的建议:

1. 在 type_check 函数中,判断 func 是否为 intstr 时,应该使用 is 运算符而不是比较运算符 ==,同时在判断类型时应该使用 type() 函数,而不是直接与字符串比较。

2. elif 语句缺少条件表达式。

3. 在 type_check 函数中,应该将传入的参数 x 作为函数的参数进行处理,而不能直接引用。

4. 装饰器应该在函数定义之前使用 @ 符号进行装饰,而不是在调用函数时进行。

下面是修改后的代码:
def type_check(func):
    def decorator(x):
        if func is int:
            if type(x) is int:
                print(double(x))
            else:
                print("参数类型错误!")
        elif func is str:
            if type(x) is str:
                print(upper(x))
            else:
                print("参数类型错误!")
    return decorator

@type_check(int)
def double(x):
    return x * 2

@type_check(str)
def upper(s):
    return s.upper()

print("<<<--- 测试整数 --->>>")
double(2)      # 这里打印结果应该是 4
double("2")    # 这里打印结果应该是 “参数类型错误”

print("\n<<<--- 测试字符串 --->>>")
upper('I love FishC.')   # 这里打印结果应该是 I LOVE FISHC
upper(250)              # 这里打印结果应该是 “参数类型错误”

请注意,以上修改仅是根据你提供的代码进行推测,可能还需要根据实际需求进一步调整。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-27 13:15:35 | 显示全部楼层
问题出在装饰器函数type_check()的代码实现上。以下是正确的代码实现:
def type_check(func):
    def wrapper(x):
        if isinstance(x, func):
            return func(x)
        else:
            print("参数类型错误!")
    return wrapper

print("<<<--- 测试整数 --->>>")

@type_check(int)
def double(x):
    return x * 2

print(double(2))       # 这里打印结果应该是 4
print(double("2"))     # 这里打印结果应该是 “参数类型错误”


print("\n<<<--- 测试字符串 --->>>")

@type_check(str)
def upper(s):
    return s.upper()

print(upper('I love FishC.'))   # 这里打印结果应该是 I LOVE FISHC
print(upper(250))               # 这里打印结果应该是 “参数类型错误”

解释:
· 在type_check()装饰器函数内部,我们定义了一个新的函数wrapper,它接受一个参数x。
· 在wrapper函数内部,我们首先使用isinstance()函数判断x的类型是否与传入的func类型相符。如果相符,则调用func(x)并返回结果。
· 如果x的类型与func类型不符,则打印"参数类型错误!"。
· 最后,将wrapper函数作为装饰器函数的返回值,用于包装原始函数。

这样,当我们使用@type_check装饰器来修饰double()和upper()函数时,会先进行参数类型检查,如果类型符合要求,则执行原始函数,否则打印错误信息。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-24 22:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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