鱼C论坛

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

[已解决]VSCODE调用类时为什么出错?

[复制链接]
发表于 2022-11-16 13:10:43 | 显示全部楼层 |阅读模式

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

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

x
听网上说IDLE唯一的优点就是启动快了,缺点却一大堆,然后我就跟网上配置了VSCODE,但是遇到了一些问题
  1. class LandW:
  2.     def __init__(self):
  3.         self.l = ''
  4.         self.w = ''
  5.     def setLandW(self):
  6.         print("请输入矩形的长和宽...")
  7.         self.l = input("长:")
  8.         self.w = input("宽:")
  9.         if self.l == '0' and self.w == '0':
  10.             print("矩形的长和宽不能为零!请重新设置!")
  11.             self.l = ''
  12.             self.w = ''
  13.         elif float(self.l) < 0 and float(self.w) < 0:
  14.             print("矩形的长和宽不能小于零!请重新设置!")
  15.             self.l = ''
  16.             self.w = ''
  17.         elif (self.l == '0' and float(self.w) < 0) or (float(self.l) < 0 and self.w == '0'):
  18.             print("矩形的长和宽不能小于或等于零!请重新设置!")
  19.             self.l = ''
  20.             self.w = ''
  21.         elif (self.l == '0' and float(self.w) >  0) or (float(self.l) > 0 and self.w == '0'):
  22.             print("矩形的长或宽不能等于零!请重新设置!")
  23.             self.l = ''
  24.             self.w = ''
  25.         elif (float(self.l) < 0 and float(self.w) > 0) or (float(self.l) > 0 and float(self.w) < 0):
  26.             print("矩形的长或宽不能小于零!请重新设置!")
  27.             self.l = ''
  28.             self.w = ''
  29.     def getLandW(self):
  30.         if self.l == '' or self.w == '':
  31.             print("您还没有设置矩形的长和宽!请输入l.setLandW以设置!")
  32.         else:
  33.             print("矩形的长为:{},宽为{}".format(self.l,self.w))
  34.     def getArea(self):
  35.         if self.l == '' or self.w == '':
  36.             print("您还没有设置矩形的长和宽!请输入l.setLandW以设置!")
  37.         else:
  38.             area = float(self.l) * float(self.w)
  39.             print("矩形的面积为:{}".format(area))
  40.     def help_lw(self):
  41.         print("l.setLandW() -- 设置矩形的长和宽")
  42.         print("l.getLandW() -- 检查您所输入矩形的长和宽")
  43.         print("l.getArea() -- 查看您所输入的矩形的面积")
复制代码



我用“非调试模式运行”运行,可是输入“l = LandW()”后为啥报错了?IDLE是正常没问题的
VSCODE运行
  1. PS E:\Python Learning> l = LandW()
  2. 所在位置 行:1 字符: 11
  3. + l = LandW()
  4. +           ~
  5. “(”后面应为表达式。
  6.     + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
  7.     + FullyQualifiedErrorId : ExpectedExpression
复制代码



IDLE运行
  1. Python 3.10.7 (tags/v3.10.7:6cc6b13, Sep  5 2022, 14:08:36) [MSC v.1933 64 bit (AMD64)] on win32
  2. Type "help", "copyright", "credits" or "license()" for more information.

  3. ============= RESTART: E:\Python Learning\Fish C Homework\36.-.1.py ============
  4. l = LandW()
  5. l.getArea()
  6. 您还没有设置矩形的长和宽!请输入setLandW以设置!
复制代码



还有一个问题,就是怎么在LandW这个类外面定义一个函数,用来重置self.l和self.w,并且可以在LandW里面调用这个函数?
感谢!
最佳答案
2022-11-16 13:24:09
本帖最后由 hrpzcf 于 2022-11-16 13:31 编辑

你在VSCODE里运行的那是集成终端,是用来运行命令的,IDLE的那是交互窗口,用来运行代码的,你要区分清楚。
直接在你的代码后面加上
l = LandW()
l.getArea()
然后运行文件就行了。

还有一个问题,就是怎么在LandW这个类外面定义一个函数,用来重置self.l和self.w,并且可以在LandW里面调用这个函数?

为啥要在LandW类外面定义函数然后在LandW里面调用呢?在类里定义然后直接以实例方法调用重置self.l和self.w不可以吗



  1. class LandW:
  2.     def __init__(self):
  3.         self.l = ""
  4.         self.w = ""

  5.     def setLandW(self):
  6.         print("请输入矩形的长和宽...")
  7.         self.l = input("长:")
  8.         self.w = input("宽:")
  9.         if self.l == "0" and self.w == "0":
  10.             print("矩形的长和宽不能为零!请重新设置!")
  11.             self.l = ""
  12.             self.w = ""
  13.         elif float(self.l) < 0 and float(self.w) < 0:
  14.             print("矩形的长和宽不能小于零!请重新设置!")
  15.             self.l = ""
  16.             self.w = ""
  17.         elif (self.l == "0" and float(self.w) < 0) or (
  18.             float(self.l) < 0 and self.w == "0"
  19.         ):
  20.             print("矩形的长和宽不能小于或等于零!请重新设置!")
  21.             self.l = ""
  22.             self.w = ""
  23.         elif (self.l == "0" and float(self.w) > 0) or (
  24.             float(self.l) > 0 and self.w == "0"
  25.         ):
  26.             print("矩形的长或宽不能等于零!请重新设置!")
  27.             self.l = ""
  28.             self.w = ""
  29.         elif (float(self.l) < 0 and float(self.w) > 0) or (
  30.             float(self.l) > 0 and float(self.w) < 0
  31.         ):
  32.             print("矩形的长或宽不能小于零!请重新设置!")
  33.             self.l = ""
  34.             self.w = ""

  35.     def getLandW(self):
  36.         if self.l == "" or self.w == "":
  37.             print("您还没有设置矩形的长和宽!请输入l.setLandW以设置!")
  38.         else:
  39.             print("矩形的长为:{},宽为{}".format(self.l, self.w))

  40.     def getArea(self):
  41.         if self.l == "" or self.w == "":
  42.             print("您还没有设置矩形的长和宽!请输入l.setLandW以设置!")
  43.         else:
  44.             area = float(self.l) * float(self.w)
  45.             print("矩形的面积为:{}".format(area))

  46.     def help_lw(self):
  47.         print("l.setLandW() -- 设置矩形的长和宽")
  48.         print("l.getLandW() -- 检查您所输入矩形的长和宽")
  49.         print("l.getArea() -- 查看您所输入的矩形的面积")

  50.     def reset(self):
  51.         """重置l和w"""
  52.         self.l = ""
  53.         self.w = ""

  54. l = LandW()
  55. l.getArea()

  56. # 重置
  57. l.reset()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-11-16 13:24:09 | 显示全部楼层    本楼为最佳答案   
本帖最后由 hrpzcf 于 2022-11-16 13:31 编辑

你在VSCODE里运行的那是集成终端,是用来运行命令的,IDLE的那是交互窗口,用来运行代码的,你要区分清楚。
直接在你的代码后面加上
l = LandW()
l.getArea()
然后运行文件就行了。

还有一个问题,就是怎么在LandW这个类外面定义一个函数,用来重置self.l和self.w,并且可以在LandW里面调用这个函数?

为啥要在LandW类外面定义函数然后在LandW里面调用呢?在类里定义然后直接以实例方法调用重置self.l和self.w不可以吗



  1. class LandW:
  2.     def __init__(self):
  3.         self.l = ""
  4.         self.w = ""

  5.     def setLandW(self):
  6.         print("请输入矩形的长和宽...")
  7.         self.l = input("长:")
  8.         self.w = input("宽:")
  9.         if self.l == "0" and self.w == "0":
  10.             print("矩形的长和宽不能为零!请重新设置!")
  11.             self.l = ""
  12.             self.w = ""
  13.         elif float(self.l) < 0 and float(self.w) < 0:
  14.             print("矩形的长和宽不能小于零!请重新设置!")
  15.             self.l = ""
  16.             self.w = ""
  17.         elif (self.l == "0" and float(self.w) < 0) or (
  18.             float(self.l) < 0 and self.w == "0"
  19.         ):
  20.             print("矩形的长和宽不能小于或等于零!请重新设置!")
  21.             self.l = ""
  22.             self.w = ""
  23.         elif (self.l == "0" and float(self.w) > 0) or (
  24.             float(self.l) > 0 and self.w == "0"
  25.         ):
  26.             print("矩形的长或宽不能等于零!请重新设置!")
  27.             self.l = ""
  28.             self.w = ""
  29.         elif (float(self.l) < 0 and float(self.w) > 0) or (
  30.             float(self.l) > 0 and float(self.w) < 0
  31.         ):
  32.             print("矩形的长或宽不能小于零!请重新设置!")
  33.             self.l = ""
  34.             self.w = ""

  35.     def getLandW(self):
  36.         if self.l == "" or self.w == "":
  37.             print("您还没有设置矩形的长和宽!请输入l.setLandW以设置!")
  38.         else:
  39.             print("矩形的长为:{},宽为{}".format(self.l, self.w))

  40.     def getArea(self):
  41.         if self.l == "" or self.w == "":
  42.             print("您还没有设置矩形的长和宽!请输入l.setLandW以设置!")
  43.         else:
  44.             area = float(self.l) * float(self.w)
  45.             print("矩形的面积为:{}".format(area))

  46.     def help_lw(self):
  47.         print("l.setLandW() -- 设置矩形的长和宽")
  48.         print("l.getLandW() -- 检查您所输入矩形的长和宽")
  49.         print("l.getArea() -- 查看您所输入的矩形的面积")

  50.     def reset(self):
  51.         """重置l和w"""
  52.         self.l = ""
  53.         self.w = ""

  54. l = LandW()
  55. l.getArea()

  56. # 重置
  57. l.reset()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-16 13:40:58 | 显示全部楼层
本帖最后由 jackz007 于 2022-11-16 14:16 编辑
  1. class LandW:
  2.     def __init__(self , length = None , width = None) :
  3.         if length and width and length > 0 and width > 0 :
  4.             self . l , self . w = length , width
  5.         else :
  6.             self . l , self . w = None , None
  7.             self . setLandW()      
  8.     def setLandW(self , length = None , width = None) :
  9.         if length and width and length > 0 and width > 0 :
  10.             self . l , self . w = length , width
  11.         else :
  12.             while True :
  13.                 length , width = map(eval , input("请输入矩形的长和宽 (长 宽) :") . split())
  14.                 if length > 0 and width > 0 : self . l , self . w = length , width
  15.                 if self . l and self . w and self . l > 0 and self . w > 0 : break
  16.     def getLandW(self):
  17.         print("矩形的长为:{},宽为:{}" . format(self.l , self.w))
  18.     def getArea(self):
  19.         print("矩形的面积为:{}" . format(self . l * self . w))
  20.     def help_lw(self):
  21.         print("l . setLandW() -- 设置矩形的长和宽")
  22.         print("l . getLandW() -- 检查您所输入矩形的长和宽")
  23.         print("l . getArea() -- 查看您所输入的矩形的面积")
  24.     def __repr__(self):
  25.         return "矩形的面积为:{}" . format(self . l * self . w)

  26.     __str__ = __repr__
  27. l = LandW()
  28. l . getArea()
  29. x = LandW(13 , 27)
  30. print(x)
  31. x . setLandW(3 , 7)
  32. print(x)
复制代码

        运行实况:
  1. D:\[00.Exerciese.2022]\Python>python x.py
  2. 请输入矩形的长和宽 (长 宽) :3 5
  3. 矩形的面积为:15
  4. 矩形的面积为:351
  5. 矩形的面积为:21

  6. D:\[00.Exerciese.2022]\Python>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-25 21:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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