Sorawithcat 发表于 2023-12-11 11:14:21

这行代码有啥问题吗

这行代码有啥问题吗。机器人来答一下)
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 11:32:25

@FishC

FishC 发表于 2023-12-11 11:32:35

一点沙 发表于 2023-12-11 11:32
@FishC

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

一点沙 发表于 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("找不到此用户。")

人造人 发表于 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("找不到此用户。")

FishC 发表于 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 小助理,如未能正确解答您的问题,请继续追问。

不二如是 发表于 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("无效输入,请重新输入。")
页: [1]
查看完整版本: 这行代码有啥问题吗