鱼C论坛

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

[已解决]求助代码问题

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

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

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

x
这个代码哪里错了?
  1. # 题目要求:
  2. # 请在此处补充装饰器 type_check() 的代码
  3. def type_check(func):
  4.     if func == int:
  5.         if type(x) == "int":
  6.             print(double(x))
  7.         elif:
  8.             print("参数类型错误!")
  9.     elif func == str:
  10.         if type(x) == "str":
  11.             print(upper(x))
  12.         elif:
  13.             print("参数类型错误!")

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

  15. @type_check(int)
  16. def double(x):
  17.     return x * 2

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


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

  21. @type_check(str)
  22. def upper(s):
  23.     return s.upper()

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

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

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

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

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

下面是修改后的代码:

  1. def type_check(func):
  2.     def decorator(x):
  3.         if func is int:
  4.             if type(x) is int:
  5.                 print(double(x))
  6.             else:
  7.                 print("参数类型错误!")
  8.         elif func is str:
  9.             if type(x) is str:
  10.                 print(upper(x))
  11.             else:
  12.                 print("参数类型错误!")
  13.     return decorator

  14. @type_check(int)
  15. def double(x):
  16.     return x * 2

  17. @type_check(str)
  18. def upper(s):
  19.     return s.upper()

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

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


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

使用道具 举报

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

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

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

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

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

下面是修改后的代码:

  1. def type_check(func):
  2.     def decorator(x):
  3.         if func is int:
  4.             if type(x) is int:
  5.                 print(double(x))
  6.             else:
  7.                 print("参数类型错误!")
  8.         elif func is str:
  9.             if type(x) is str:
  10.                 print(upper(x))
  11.             else:
  12.                 print("参数类型错误!")
  13.     return decorator

  14. @type_check(int)
  15. def double(x):
  16.     return x * 2

  17. @type_check(str)
  18. def upper(s):
  19.     return s.upper()

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

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


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

使用道具 举报

发表于 2023-8-27 13:15:35 | 显示全部楼层
问题出在装饰器函数type_check()的代码实现上。以下是正确的代码实现:

  1. def type_check(func):
  2.     def wrapper(x):
  3.         if isinstance(x, func):
  4.             return func(x)
  5.         else:
  6.             print("参数类型错误!")
  7.     return wrapper

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

  9. @type_check(int)
  10. def double(x):
  11.     return x * 2

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


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

  15. @type_check(str)
  16. def upper(s):
  17.     return s.upper()

  18. print(upper('I love FishC.'))   # 这里打印结果应该是 I LOVE FISHC
  19. 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-5-20 17:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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