鱼C论坛

 找回密码
 立即注册
查看: 634|回复: 6

[已解决]这行代码有啥问题吗

[复制链接]
发表于 2023-12-11 11:14:21 | 显示全部楼层 |阅读模式

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

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

x
这行代码有啥问题吗。机器人来答一下)
select=0
cunk=0
quk=0
jihui=0
class Cunchu(object):
    yue=1000.00
    name="gch"
    cardID=123456
    def user(self,name,cardID,yue):
        user.__name=name
        user.__cardID=cardID
        user.__yue=yue

    def get_user_name(self):
        return user.__name

    def get_user_cardID(self):
        return user.__cardID

    def get_user_yue(self):
        return user.__yue

    def set_user_name(self,name):
        user.__name=__name

    def set_user_cardID(self,cardID):
        user.__cardID=__cardID

    def set_user_yue(self,yue):
        user.__yue=__yue
user1=Cunchu()

while(1):
    print("按1储存你的信息,按2存款,按3取款,按4查询信息\n")
    select=int(input())
    if (select == 1):
        print("输入你的姓名。\n")
        user1.set_user_name(input())
        print("输入你的卡号。\n")
        user1.set_user_cardID(input())
    elif (select == 2):
        print("输入你存的款\n")
        cunk=int(input())
        user1.set_user_yue((user1.get_user_yue)+cunk)
    elif (select == 3):
        print("输入你取的款\n")
        quk=int(input())
        if (quk<0 or quk>user1.get_user_yue):
            print("你输入的数字小于0或者你的余额不足\n")
            continue
        else:
            user1.set_user_yue((user1.get_user_yue)-quk)
    elif (select == 4):
        print("输入你的姓名\n")
        if input()==user1.get_user_name:
            jihui=0
            while(jihui<3):
                print("输入你的卡号\n")
                if int(input())==user1.get_user_cardID:
                    jihui=4
                    print("姓名:%s",user1.get_user_name)
                    print("卡号:%d",user1.get_user_cardID)
                    print("余额:%d",user1.get_user_yue)
                else:
                    print("你的卡号输入错误。还剩%d次机会。",2-jihui)
                    jihui+=1
        else:
            print("找不到此用户。")
最佳答案
2023-12-11 13:40:37
问题:

  • 私有属性使用错误:在Python中,私有属性通常以双下划线开头(例如 __name),但在类方法中应该使用self.__name来访问它们。您的代码中使用了user.__name这样的表达方式,这是不正确的。
  • 方法定义不正确:您的代码中有一个名为user的方法,但它看起来应该是一个初始化方法。在Python中,初始化方法通常命名为__init__。
  • 类变量和实例变量混用:您的代码同时使用了类级别的变量(如yue, name, cardID)和实例变量,这可能会导致混淆。您应该在__init__方法中使用实例变量。
  • 设置方法中赋值错误:在设置方法(setter)中,您错误地进行了赋值。例如,应该是self.__name = name而不是user.__name = __name。
  • 输入处理不正确:您没有正确处理用户的输入。例如,在user1.set_user_cardID(input())中,您没有将输入转换为所需的数据类型。
  • 存取款逻辑错误:存款和取款的逻辑没有正确实现。您需要在每次交易后更新余额。
  • 输入验证问题:代码中没有对用户输入进行验证。处理用户可能输入的无效数据非常重要。
  • 无限循环:您的while(1)循环将无限运行。您应该为用户提供退出循环的选项。


修改后:
class Cunchu(object):
    def __init__(self):
        self.__yue = 0.00
        self.__name = ""
        self.__cardID = 0

    def set_user_info(self, name, cardID):
        self.__name = name
        self.__cardID = int(cardID)

    def deposit(self, amount):
        self.__yue += amount

    def withdraw(self, amount):
        if 0 <= amount <= self.__yue:
            self.__yue -= amount
            return True
        else:
            return False

    def get_user_info(self):
        return self.__name, self.__cardID, self.__yue


user1 = Cunchu()

while True:
    print("按1储存你的信息,按2存款,按3取款,按4查询信息,按5退出程序\n")
    select = int(input())
    
    if select == 1:
        print("输入你的姓名:")
        name = input()
        print("输入你的卡号:")
        cardID = input()
        user1.set_user_info(name, cardID)
    elif select == 2:
        print("输入你要存的金额:")
        amount = float(input())
        user1.deposit(amount)
    elif select == 3:
        print("输入你要取的金额:")
        amount = float(input())
        if not user1.withdraw(amount):
            print("你输入的金额不正确或者余额不足")
    elif select == 4:
        name, cardID, balance = user1.get_user_info()
        if name and cardID:
            print(f"姓名:{name}, 卡号:{cardID}, 余额:{balance}")
        else:
            print("用户信息尚未设置。")
    elif select == 5:
        break
    else:
        print("无效输入,请重新输入。")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-11 11:32:25 | 显示全部楼层
@FishC
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-11 11:32:35 | 显示全部楼层

嗨!你好!有什么问题我可以帮助你解答呢?

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-11 11:33:11 | 显示全部楼层
本帖最后由 一点沙 于 2023-12-11 11:34 编辑

@FishC 这几行代码有什么问题
select=0
cunk=0
quk=0
jihui=0
class Cunchu(object):
    yue=1000.00
    name="gch"
    cardID=123456
    def user(self,name,cardID,yue):
        user.__name=name
        user.__cardID=cardID
        user.__yue=yue

    def get_user_name(self):
        return user.__name

    def get_user_cardID(self):
        return user.__cardID

    def get_user_yue(self):
        return user.__yue

    def set_user_name(self,name):
        user.__name=__name

    def set_user_cardID(self,cardID):
        user.__cardID=__cardID

    def set_user_yue(self,yue):
        user.__yue=__yue
user1=Cunchu()

while(1):
    print("按1储存你的信息,按2存款,按3取款,按4查询信息\n")
    select=int(input())
    if (select == 1):
        print("输入你的姓名。\n")
        user1.set_user_name(input())
        print("输入你的卡号。\n")
        user1.set_user_cardID(input())
    elif (select == 2):
        print("输入你存的款\n")
        cunk=int(input())
        user1.set_user_yue((user1.get_user_yue)+cunk)
    elif (select == 3):
        print("输入你取的款\n")
        quk=int(input())
        if (quk<0 or quk>user1.get_user_yue):
            print("你输入的数字小于0或者你的余额不足\n")
            continue
        else:
            user1.set_user_yue((user1.get_user_yue)-quk)
    elif (select == 4):
        print("输入你的姓名\n")
        if input()==user1.get_user_name:
            jihui=0
            while(jihui<3):
                print("输入你的卡号\n")
                if int(input())==user1.get_user_cardID:
                    jihui=4
                    print("姓名:%s",user1.get_user_name)
                    print("卡号:%d",user1.get_user_cardID)
                    print("余额:%d",user1.get_user_yue)
                else:
                    print("你的卡号输入错误。还剩%d次机会。",2-jihui)
                    jihui+=1
        else:
            print("找不到此用户。")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-11 12:33:59 | 显示全部楼层
FishC 发表于 2023-12-11 11:32
嗨!你好!有什么问题我可以帮助你解答呢?

以上回复来自 FishC AI 小助理,如未能正确解答您的问题, ...

下面这个代码有什么问题?
select=0
cunk=0
quk=0
jihui=0
class Cunchu(object):
    yue=1000.00
    name="gch"
    cardID=123456
    def user(self,name,cardID,yue):
        user.__name=name
        user.__cardID=cardID
        user.__yue=yue

    def get_user_name(self):
        return user.__name

    def get_user_cardID(self):
        return user.__cardID

    def get_user_yue(self):
        return user.__yue

    def set_user_name(self,name):
        user.__name=__name

    def set_user_cardID(self,cardID):
        user.__cardID=__cardID

    def set_user_yue(self,yue):
        user.__yue=__yue
user1=Cunchu()

while(1):
    print("按1储存你的信息,按2存款,按3取款,按4查询信息\n")
    select=int(input())
    if (select == 1):
        print("输入你的姓名。\n")
        user1.set_user_name(input())
        print("输入你的卡号。\n")
        user1.set_user_cardID(input())
    elif (select == 2):
        print("输入你存的款\n")
        cunk=int(input())
        user1.set_user_yue((user1.get_user_yue)+cunk)
    elif (select == 3):
        print("输入你取的款\n")
        quk=int(input())
        if (quk<0 or quk>user1.get_user_yue):
            print("你输入的数字小于0或者你的余额不足\n")
            continue
        else:
            user1.set_user_yue((user1.get_user_yue)-quk)
    elif (select == 4):
        print("输入你的姓名\n")
        if input()==user1.get_user_name:
            jihui=0
            while(jihui<3):
                print("输入你的卡号\n")
                if int(input())==user1.get_user_cardID:
                    jihui=4
                    print("姓名:%s",user1.get_user_name)
                    print("卡号:%d",user1.get_user_cardID)
                    print("余额:%d",user1.get_user_yue)
                else:
                    print("你的卡号输入错误。还剩%d次机会。",2-jihui)
                    jihui+=1
        else:
            print("找不到此用户。")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-11 12:37:11 | 显示全部楼层
人造人 发表于 2023-12-11 12:33
下面这个代码有什么问题?

select=0
cunk=0
quk= ...

这段代码存在一些问题。让我们逐个解决它们:

1. 在类定义中,函数 `user` 的定义不正确。应该是使用 `self.name`、`self.cardID` 和 `self.yue` 来引用实例变量,而不是 `user.__name`、`user.__cardID` 和 `user.__yue`。

   正确的代码应该是这样的:

def user(self, name, cardID, yue):       self.name = name       self.cardID = cardID       self.yue = yue
2. 在 `set_user_name`、`set_user_cardID` 和 `set_user_yue` 函数中,赋值语句的左侧应该是 `self.name`、`self.cardID` 和 `self.yue`,而不是 `user.__name`、`user.__cardID` 和 `user.__yue`。

   正确的代码应该是这样的:

def set_user_name(self, name):       self.name = name   def set_user_cardID(self, cardID):       self.cardID = cardID   def set_user_yue(self, yue):       self.yue = yue
3. 在 `get_user_yue` 和 `set_user_yue` 函数中,名称 `__yue` 不太合适,应该改为 `yue`。

   正确的代码应该是这样的:

def get_user_yue(self):       return self.yue   def set_user_yue(self, yue):       self.yue = yue
4. 在 `while` 循环中,有一个未结束的 `while` 循环。你可能忘记了添加循环的结束条件。

   正确的代码应该是这样的:

jihui = 0   while jihui < 10:  # 假设你想要执行十次循环       # 循环体的代码       jihui += 1
这些是我发现的问题,希望对你有帮助!如果还有其他问题,请随时问我。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-11 13:40:37 | 显示全部楼层    本楼为最佳答案   
问题:

  • 私有属性使用错误:在Python中,私有属性通常以双下划线开头(例如 __name),但在类方法中应该使用self.__name来访问它们。您的代码中使用了user.__name这样的表达方式,这是不正确的。
  • 方法定义不正确:您的代码中有一个名为user的方法,但它看起来应该是一个初始化方法。在Python中,初始化方法通常命名为__init__。
  • 类变量和实例变量混用:您的代码同时使用了类级别的变量(如yue, name, cardID)和实例变量,这可能会导致混淆。您应该在__init__方法中使用实例变量。
  • 设置方法中赋值错误:在设置方法(setter)中,您错误地进行了赋值。例如,应该是self.__name = name而不是user.__name = __name。
  • 输入处理不正确:您没有正确处理用户的输入。例如,在user1.set_user_cardID(input())中,您没有将输入转换为所需的数据类型。
  • 存取款逻辑错误:存款和取款的逻辑没有正确实现。您需要在每次交易后更新余额。
  • 输入验证问题:代码中没有对用户输入进行验证。处理用户可能输入的无效数据非常重要。
  • 无限循环:您的while(1)循环将无限运行。您应该为用户提供退出循环的选项。


修改后:
class Cunchu(object):
    def __init__(self):
        self.__yue = 0.00
        self.__name = ""
        self.__cardID = 0

    def set_user_info(self, name, cardID):
        self.__name = name
        self.__cardID = int(cardID)

    def deposit(self, amount):
        self.__yue += amount

    def withdraw(self, amount):
        if 0 <= amount <= self.__yue:
            self.__yue -= amount
            return True
        else:
            return False

    def get_user_info(self):
        return self.__name, self.__cardID, self.__yue


user1 = Cunchu()

while True:
    print("按1储存你的信息,按2存款,按3取款,按4查询信息,按5退出程序\n")
    select = int(input())
    
    if select == 1:
        print("输入你的姓名:")
        name = input()
        print("输入你的卡号:")
        cardID = input()
        user1.set_user_info(name, cardID)
    elif select == 2:
        print("输入你要存的金额:")
        amount = float(input())
        user1.deposit(amount)
    elif select == 3:
        print("输入你要取的金额:")
        amount = float(input())
        if not user1.withdraw(amount):
            print("你输入的金额不正确或者余额不足")
    elif select == 4:
        name, cardID, balance = user1.get_user_info()
        if name and cardID:
            print(f"姓名:{name}, 卡号:{cardID}, 余额:{balance}")
        else:
            print("用户信息尚未设置。")
    elif select == 5:
        break
    else:
        print("无效输入,请重新输入。")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-21 19:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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