鱼C论坛

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

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

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

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

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

x
这行代码有啥问题吗。机器人来答一下)
  1. select=0
  2. cunk=0
  3. quk=0
  4. jihui=0
  5. class Cunchu(object):
  6.     yue=1000.00
  7.     name="gch"
  8.     cardID=123456
  9.     def user(self,name,cardID,yue):
  10.         user.__name=name
  11.         user.__cardID=cardID
  12.         user.__yue=yue

  13.     def get_user_name(self):
  14.         return user.__name

  15.     def get_user_cardID(self):
  16.         return user.__cardID

  17.     def get_user_yue(self):
  18.         return user.__yue

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

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

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

  26. while(1):
  27.     print("按1储存你的信息,按2存款,按3取款,按4查询信息\n")
  28.     select=int(input())
  29.     if (select == 1):
  30.         print("输入你的姓名。\n")
  31.         user1.set_user_name(input())
  32.         print("输入你的卡号。\n")
  33.         user1.set_user_cardID(input())
  34.     elif (select == 2):
  35.         print("输入你存的款\n")
  36.         cunk=int(input())
  37.         user1.set_user_yue((user1.get_user_yue)+cunk)
  38.     elif (select == 3):
  39.         print("输入你取的款\n")
  40.         quk=int(input())
  41.         if (quk<0 or quk>user1.get_user_yue):
  42.             print("你输入的数字小于0或者你的余额不足\n")
  43.             continue
  44.         else:
  45.             user1.set_user_yue((user1.get_user_yue)-quk)
  46.     elif (select == 4):
  47.         print("输入你的姓名\n")
  48.         if input()==user1.get_user_name:
  49.             jihui=0
  50.             while(jihui<3):
  51.                 print("输入你的卡号\n")
  52.                 if int(input())==user1.get_user_cardID:
  53.                     jihui=4
  54.                     print("姓名:%s",user1.get_user_name)
  55.                     print("卡号:%d",user1.get_user_cardID)
  56.                     print("余额:%d",user1.get_user_yue)
  57.                 else:
  58.                     print("你的卡号输入错误。还剩%d次机会。",2-jihui)
  59.                     jihui+=1
  60.         else:
  61.             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)循环将无限运行。您应该为用户提供退出循环的选项。


修改后:

  1. class Cunchu(object):
  2.     def __init__(self):
  3.         self.__yue = 0.00
  4.         self.__name = ""
  5.         self.__cardID = 0

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

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

  11.     def withdraw(self, amount):
  12.         if 0 <= amount <= self.__yue:
  13.             self.__yue -= amount
  14.             return True
  15.         else:
  16.             return False

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


  19. user1 = Cunchu()

  20. while True:
  21.     print("按1储存你的信息,按2存款,按3取款,按4查询信息,按5退出程序\n")
  22.     select = int(input())
  23.    
  24.     if select == 1:
  25.         print("输入你的姓名:")
  26.         name = input()
  27.         print("输入你的卡号:")
  28.         cardID = input()
  29.         user1.set_user_info(name, cardID)
  30.     elif select == 2:
  31.         print("输入你要存的金额:")
  32.         amount = float(input())
  33.         user1.deposit(amount)
  34.     elif select == 3:
  35.         print("输入你要取的金额:")
  36.         amount = float(input())
  37.         if not user1.withdraw(amount):
  38.             print("你输入的金额不正确或者余额不足")
  39.     elif select == 4:
  40.         name, cardID, balance = user1.get_user_info()
  41.         if name and cardID:
  42.             print(f"姓名:{name}, 卡号:{cardID}, 余额:{balance}")
  43.         else:
  44.             print("用户信息尚未设置。")
  45.     elif select == 5:
  46.         break
  47.     else:
  48.         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 这几行代码有什么问题
  1. select=0
  2. cunk=0
  3. quk=0
  4. jihui=0
  5. class Cunchu(object):
  6.     yue=1000.00
  7.     name="gch"
  8.     cardID=123456
  9.     def user(self,name,cardID,yue):
  10.         user.__name=name
  11.         user.__cardID=cardID
  12.         user.__yue=yue

  13.     def get_user_name(self):
  14.         return user.__name

  15.     def get_user_cardID(self):
  16.         return user.__cardID

  17.     def get_user_yue(self):
  18.         return user.__yue

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

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

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

  26. while(1):
  27.     print("按1储存你的信息,按2存款,按3取款,按4查询信息\n")
  28.     select=int(input())
  29.     if (select == 1):
  30.         print("输入你的姓名。\n")
  31.         user1.set_user_name(input())
  32.         print("输入你的卡号。\n")
  33.         user1.set_user_cardID(input())
  34.     elif (select == 2):
  35.         print("输入你存的款\n")
  36.         cunk=int(input())
  37.         user1.set_user_yue((user1.get_user_yue)+cunk)
  38.     elif (select == 3):
  39.         print("输入你取的款\n")
  40.         quk=int(input())
  41.         if (quk<0 or quk>user1.get_user_yue):
  42.             print("你输入的数字小于0或者你的余额不足\n")
  43.             continue
  44.         else:
  45.             user1.set_user_yue((user1.get_user_yue)-quk)
  46.     elif (select == 4):
  47.         print("输入你的姓名\n")
  48.         if input()==user1.get_user_name:
  49.             jihui=0
  50.             while(jihui<3):
  51.                 print("输入你的卡号\n")
  52.                 if int(input())==user1.get_user_cardID:
  53.                     jihui=4
  54.                     print("姓名:%s",user1.get_user_name)
  55.                     print("卡号:%d",user1.get_user_cardID)
  56.                     print("余额:%d",user1.get_user_yue)
  57.                 else:
  58.                     print("你的卡号输入错误。还剩%d次机会。",2-jihui)
  59.                     jihui+=1
  60.         else:
  61.             print("找不到此用户。")
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

下面这个代码有什么问题?

  1. select=0
  2. cunk=0
  3. quk=0
  4. jihui=0
  5. class Cunchu(object):
  6.     yue=1000.00
  7.     name="gch"
  8.     cardID=123456
  9.     def user(self,name,cardID,yue):
  10.         user.__name=name
  11.         user.__cardID=cardID
  12.         user.__yue=yue

  13.     def get_user_name(self):
  14.         return user.__name

  15.     def get_user_cardID(self):
  16.         return user.__cardID

  17.     def get_user_yue(self):
  18.         return user.__yue

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

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

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

  26. while(1):
  27.     print("按1储存你的信息,按2存款,按3取款,按4查询信息\n")
  28.     select=int(input())
  29.     if (select == 1):
  30.         print("输入你的姓名。\n")
  31.         user1.set_user_name(input())
  32.         print("输入你的卡号。\n")
  33.         user1.set_user_cardID(input())
  34.     elif (select == 2):
  35.         print("输入你存的款\n")
  36.         cunk=int(input())
  37.         user1.set_user_yue((user1.get_user_yue)+cunk)
  38.     elif (select == 3):
  39.         print("输入你取的款\n")
  40.         quk=int(input())
  41.         if (quk<0 or quk>user1.get_user_yue):
  42.             print("你输入的数字小于0或者你的余额不足\n")
  43.             continue
  44.         else:
  45.             user1.set_user_yue((user1.get_user_yue)-quk)
  46.     elif (select == 4):
  47.         print("输入你的姓名\n")
  48.         if input()==user1.get_user_name:
  49.             jihui=0
  50.             while(jihui<3):
  51.                 print("输入你的卡号\n")
  52.                 if int(input())==user1.get_user_cardID:
  53.                     jihui=4
  54.                     print("姓名:%s",user1.get_user_name)
  55.                     print("卡号:%d",user1.get_user_cardID)
  56.                     print("余额:%d",user1.get_user_yue)
  57.                 else:
  58.                     print("你的卡号输入错误。还剩%d次机会。",2-jihui)
  59.                     jihui+=1
  60.         else:
  61.             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`。

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

  
  1. def user(self, name, cardID, yue):
  2.        self.name = name
  3.        self.cardID = cardID
  4.        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`。

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

  
  1. def set_user_name(self, name):
  2.        self.name = name
  3.    def set_user_cardID(self, cardID):
  4.        self.cardID = cardID
  5.    def set_user_yue(self, yue):
  6.        self.yue = yue
复制代码

3. 在 `get_user_yue` 和 `set_user_yue` 函数中,名称 `__yue` 不太合适,应该改为 `yue`。

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

  
  1. def get_user_yue(self):
  2.        return self.yue
  3.    def set_user_yue(self, yue):
  4.        self.yue = yue
复制代码

4. 在 `while` 循环中,有一个未结束的 `while` 循环。你可能忘记了添加循环的结束条件。

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

  
  1. jihui = 0
  2.    while jihui < 10:  # 假设你想要执行十次循环
  3.        # 循环体的代码
  4.        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)循环将无限运行。您应该为用户提供退出循环的选项。


修改后:

  1. class Cunchu(object):
  2.     def __init__(self):
  3.         self.__yue = 0.00
  4.         self.__name = ""
  5.         self.__cardID = 0

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

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

  11.     def withdraw(self, amount):
  12.         if 0 <= amount <= self.__yue:
  13.             self.__yue -= amount
  14.             return True
  15.         else:
  16.             return False

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


  19. user1 = Cunchu()

  20. while True:
  21.     print("按1储存你的信息,按2存款,按3取款,按4查询信息,按5退出程序\n")
  22.     select = int(input())
  23.    
  24.     if select == 1:
  25.         print("输入你的姓名:")
  26.         name = input()
  27.         print("输入你的卡号:")
  28.         cardID = input()
  29.         user1.set_user_info(name, cardID)
  30.     elif select == 2:
  31.         print("输入你要存的金额:")
  32.         amount = float(input())
  33.         user1.deposit(amount)
  34.     elif select == 3:
  35.         print("输入你要取的金额:")
  36.         amount = float(input())
  37.         if not user1.withdraw(amount):
  38.             print("你输入的金额不正确或者余额不足")
  39.     elif select == 4:
  40.         name, cardID, balance = user1.get_user_info()
  41.         if name and cardID:
  42.             print(f"姓名:{name}, 卡号:{cardID}, 余额:{balance}")
  43.         else:
  44.             print("用户信息尚未设置。")
  45.     elif select == 5:
  46.         break
  47.     else:
  48.         print("无效输入,请重新输入。")
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 21:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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