鱼C论坛

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

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

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

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

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

x
听网上说IDLE唯一的优点就是启动快了,缺点却一大堆,然后我就跟网上配置了VSCODE,但是遇到了一些问题
class LandW:
    def __init__(self):
        self.l = ''
        self.w = ''
    def setLandW(self):
        print("请输入矩形的长和宽...")
        self.l = input("长:")
        self.w = input("宽:")
        if self.l == '0' and self.w == '0':
            print("矩形的长和宽不能为零!请重新设置!")
            self.l = ''
            self.w = ''
        elif float(self.l) < 0 and float(self.w) < 0:
            print("矩形的长和宽不能小于零!请重新设置!")
            self.l = ''
            self.w = ''
        elif (self.l == '0' and float(self.w) < 0) or (float(self.l) < 0 and self.w == '0'):
            print("矩形的长和宽不能小于或等于零!请重新设置!")
            self.l = ''
            self.w = ''
        elif (self.l == '0' and float(self.w) >  0) or (float(self.l) > 0 and self.w == '0'):
            print("矩形的长或宽不能等于零!请重新设置!")
            self.l = ''
            self.w = ''
        elif (float(self.l) < 0 and float(self.w) > 0) or (float(self.l) > 0 and float(self.w) < 0):
            print("矩形的长或宽不能小于零!请重新设置!")
            self.l = ''
            self.w = ''
    def getLandW(self):
        if self.l == '' or self.w == '':
            print("您还没有设置矩形的长和宽!请输入l.setLandW以设置!")
        else:
            print("矩形的长为:{},宽为{}".format(self.l,self.w))
    def getArea(self):
        if self.l == '' or self.w == '':
            print("您还没有设置矩形的长和宽!请输入l.setLandW以设置!")
        else:
            area = float(self.l) * float(self.w)
            print("矩形的面积为:{}".format(area))
    def help_lw(self):
        print("l.setLandW() -- 设置矩形的长和宽")
        print("l.getLandW() -- 检查您所输入矩形的长和宽")
        print("l.getArea() -- 查看您所输入的矩形的面积")


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


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

============= RESTART: E:\Python Learning\Fish C Homework\36.-.1.py ============
l = LandW()
l.getArea()
您还没有设置矩形的长和宽!请输入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不可以吗


class LandW:
    def __init__(self):
        self.l = ""
        self.w = ""

    def setLandW(self):
        print("请输入矩形的长和宽...")
        self.l = input("长:")
        self.w = input("宽:")
        if self.l == "0" and self.w == "0":
            print("矩形的长和宽不能为零!请重新设置!")
            self.l = ""
            self.w = ""
        elif float(self.l) < 0 and float(self.w) < 0:
            print("矩形的长和宽不能小于零!请重新设置!")
            self.l = ""
            self.w = ""
        elif (self.l == "0" and float(self.w) < 0) or (
            float(self.l) < 0 and self.w == "0"
        ):
            print("矩形的长和宽不能小于或等于零!请重新设置!")
            self.l = ""
            self.w = ""
        elif (self.l == "0" and float(self.w) > 0) or (
            float(self.l) > 0 and self.w == "0"
        ):
            print("矩形的长或宽不能等于零!请重新设置!")
            self.l = ""
            self.w = ""
        elif (float(self.l) < 0 and float(self.w) > 0) or (
            float(self.l) > 0 and float(self.w) < 0
        ):
            print("矩形的长或宽不能小于零!请重新设置!")
            self.l = ""
            self.w = ""

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

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

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

    def reset(self):
        """重置l和w"""
        self.l = ""
        self.w = ""

l = LandW()
l.getArea()

# 重置
l.reset()
想知道小甲鱼最近在做啥?请访问 -> 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不可以吗


class LandW:
    def __init__(self):
        self.l = ""
        self.w = ""

    def setLandW(self):
        print("请输入矩形的长和宽...")
        self.l = input("长:")
        self.w = input("宽:")
        if self.l == "0" and self.w == "0":
            print("矩形的长和宽不能为零!请重新设置!")
            self.l = ""
            self.w = ""
        elif float(self.l) < 0 and float(self.w) < 0:
            print("矩形的长和宽不能小于零!请重新设置!")
            self.l = ""
            self.w = ""
        elif (self.l == "0" and float(self.w) < 0) or (
            float(self.l) < 0 and self.w == "0"
        ):
            print("矩形的长和宽不能小于或等于零!请重新设置!")
            self.l = ""
            self.w = ""
        elif (self.l == "0" and float(self.w) > 0) or (
            float(self.l) > 0 and self.w == "0"
        ):
            print("矩形的长或宽不能等于零!请重新设置!")
            self.l = ""
            self.w = ""
        elif (float(self.l) < 0 and float(self.w) > 0) or (
            float(self.l) > 0 and float(self.w) < 0
        ):
            print("矩形的长或宽不能小于零!请重新设置!")
            self.l = ""
            self.w = ""

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

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

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

    def reset(self):
        """重置l和w"""
        self.l = ""
        self.w = ""

l = LandW()
l.getArea()

# 重置
l.reset()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

    __str__ = __repr__
l = LandW()
l . getArea()
x = LandW(13 , 27)
print(x)
x . setLandW(3 , 7)
print(x)
        运行实况:
D:\[00.Exerciese.2022]\Python>python x.py
请输入矩形的长和宽 (长 宽) :3 5
矩形的面积为:15
矩形的面积为:351
矩形的面积为:21

D:\[00.Exerciese.2022]\Python>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 15:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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