【问题标题】:Return statement not executed when valid member number is entered输入有效会员号时不执行返回语句
【发布时间】:2021-10-27 10:55:37
【问题描述】:

早上好,

所以我尝试使用扫描方法创建一个帐户类,该方法对会员卡进行“虚构”扫描,但是,当我在输入字段中输入有效的 card_number 时,它会返回另一个输入字段,但如果我输入一个无效的 card_number 它会返回 Invalid ID

这是我的代码,请问我哪里出错了?

from enum import Enum
from abc import ABC, abstractmethod
import csv
import json
from datetime import datetime, timedelta, date

membersJsonPath = 'members.json'

class BookStatus(Enum):
  AVAILABLE, RESERVED, LOANED, LOST = 1, 2, 3, 4

class ReservationStatus(Enum):
  WAITING, PENDING, CANCELED, NONE = 1, 2, 3, 4

class AccountStatus(Enum):
  ACTIVE, CLOSED, CANCELED, NONE = 1, 2, 3, 4

class Account(ABC):
    def __init__(self, status=AccountStatus.ACTIVE):
        self.__id = self.scan_id()
        self.__status = status
        
    def scan_id(self):
      with open(membersJsonPath, 'r') as membersJson:
        data = json.load(membersJson)
        input_id = input("Please enter your member ID: ")
        for member in data['members']:
          if member['card_number'] == input_id:
            return ("Welcome, " + member['first_name'] + "!") 
          else:
            return "Invalid ID"

a = Account()
a.scan_id()

这是我从 CSV 文件创建的 json 文件的一部分

{
    "members": [
        {
            "\u00ef\u00bb\u00bfid": "1",
            "first_name": "Adelaide",
            "last_name": "Cunningham",
            "gender": "Female",
            "email": "a.cunningham@randatmail.com",
            "card_number": "13"
        },
        {
            "\u00ef\u00bb\u00bfid": "2",
            "first_name": "Charlie",
            "last_name": "Roberts",
            "gender": "Male",
            "email": "c.roberts@randatmail.com",
            "card_number": "22"
        },
        {
            "\u00ef\u00bb\u00bfid": "3",
            "first_name": "Eric",
            "last_name": "Cooper",
            "gender": "Male",
            "email": "e.cooper@randatmail.com",
            "card_number": "33"
        },
        {
            "\u00ef\u00bb\u00bfid": "4",
            "first_name": "Cadie",
            "last_name": "Hall",
            "gender": "Female",
            "email": "c.hall@randatmail.com",
            "card_number": "43"
        }
   ]
}

【问题讨论】:

  • 您的__init__ 方法正在调用self.scan_id(),然后在您使用a.scan_id() 实例化后再次调用它。
  • 我把它改成了 self.__id = None 谢谢。

标签: python json file class methods


【解决方案1】:

问题出在这个for循环中:

for member in data['members']:
    if member['card_number'] == input_id:
        return ("Welcome, " + member['first_name'] + "!") 
    else:
        return "Invalid ID"

这里,如果input_id等于第一个会员卡号,则返回欢迎信息,否则"Invalid ID"。你想扫描所有的卡号,如果没有一个匹配就返回"Invalid ID",所以第二个return语句应该在for循环结束之后:


for member in data['members']:
    if member['card_number'] == input_id:
        return ("Welcome, " + member['first_name'] + "!") 
    
return "Invalid ID"

【讨论】:

  • 太棒了,它现在可以工作了,我得到了正确的结果。非常感谢。
猜你喜欢
  • 2022-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多