在python中,如何从一个问题添加到两个列表中

在python中,如何从一个问题添加到两个列表中,python,python-3.x,list,Python,Python 3.x,List,我不知道我是否走错了方向,但我希望你能帮我睁开眼睛。我也不太确定这个问题的措辞是否正确,但我需要这个问题来询问用户他们会选择哪个模块两次,然后将其添加到单独的列表中。我想有更好的方法可以做到这一点 重要的是,我要将用户输入插入列表,而不是其他类型的容器 def Module_selection(lss=[]): print("Welcome, you can pick your module here") modules = ["Programmin

我不知道我是否走错了方向,但我希望你能帮我睁开眼睛。我也不太确定这个问题的措辞是否正确,但我需要这个问题来询问用户他们会选择哪个模块两次,然后将其添加到单独的列表中。我想有更好的方法可以做到这一点

重要的是,我要将用户输入插入列表,而不是其他类型的容器

def Module_selection(lss=[]):
    print("Welcome, you can pick your module here")
    modules = ["Programming 1", "Programming 2", "Networking 1", "Mathematics"]
    print(lss)
    StudID = input("Please enter your student ID: ")
    Password = input("Please enter your password: ")
    if StudID.isnumeric():
        StudID = int(StudID)
    found = 0
    for item in lss:
        if StudID == item[5] and Password == item[4]:
            option = input("""Please select the first module you want to take
                                1)Programming 1
                                2)Programming 2
                                3)Networking 1
                                4)Mathematics""")

            found = 1

            if option == "1":
                item[6] = modules[0]
                break


            elif option == "2":
                item[6] = modules[1]
                break


            elif option == "3":
                item[6] = modules[2]
                break


            elif option == "4":
                item[6] = modules[3]
                break



    if found == 0:
        print("There is no student with this information")

我可以看出,在计算机编程中,你需要关注的最重要的原则是尽可能将不同的任务分开

例如,您有:

  • 检查用户名和密码是否正确的代码
  • 询问学生想要学习的课程的代码:
    • 联网
    • 英式
    • 数学等等
检查登录凭据和选择课程是两项截然不同的任务

但是,您将它们的代码交织在一起

它有助于将检查用户名和密码的代码放在一个单独的函数中

def get_和_check_登录_凭据(lss=[]):
StudID=输入(“请输入您的学生ID:”)
密码=输入(“请输入您的密码:”)
如果StudID.isnumeric():
StudID=int(StudID)
找到=0
对于lss中的项目:
如果StudID==项目[5]和密码==项目[4]:
发现=1
如果找到==0:
打印(“没有学生拥有此信息”)
我注意到另外一件事:

您定义了一个包含以下两项代码的函数:

  • 处理许多项目
  • 只处理一个项目
#一个功能,完成所有功能
def模块_选择(lss=[]):
#此函数处理许多项
#`lss`包含许多项
对于lss中的项目:
#在for循环的内部
#处理一个项目的*大量*代码
以下内容应写成两个独立的函数:
代码不应全部包含在一个函数中:

  • 处理多个项目的代码
  • 仅处理一个项目的代码
  • 以下更好:

    def进程(lss=[]):
    对于lss中的项目:
    #处理一个项目
    过程(项目)
    #几乎没有内联代码
    #只需调用函数来处理一个项目
    def过程_1(项目):
    通过
    #将处理一个项目的代码放在这里。
    
    下面,我试图清理您检查用户名和密码的代码,但这对我来说毫无意义:

    def get_和_check_凭证(项目):
    StudID=输入(“请输入您的学生ID:”)
    密码=输入(“请输入您的密码:”)
    如果StudID.isnumeric():
    StudID=int(StudID)
    如果StudID==项目[5]和密码==项目[4]:
    返回True#允许访问
    返回False#禁止访问
    
    请注意:

    • 项[5]
      包含“正确的”学生ID
    • 项[6]
      包含“正确的”密码
    我不知道为什么
    item
    被命名为
    item

    变量名称应始终有意义。
    比如说,

    • shirt\u size
      ”是比“
      s
      ”更好的变量名
    为什么用户名和密码存储在“
    项”
    ”中

    另外,假设您正在使用一个网站,例如
    gmail.com
    stackoverflow.com

    你输入你的用户名

    以下内容与您的代码非常相似:

    StudID=input(“请输入您的学生ID:”)
    如果StudID==正确的\u用户名:
    #选择要注册的课程
    其他:
    #禁止进入。
    #禁止最终用户注册大学课程。
    
    网站如何提前知道正确的学生ID

    这就好像计算机已经知道用户应该输入什么用户名

    如果
    stackoverflow.com
    是这样的话,那就意味着地球上只有一个人可以登录
    stackoverflow.com
    其他人不能使用
    stackoverflow.com

    我建议搜索学生ID

    如果您有一个很长的学生ID列表,您可以搜索该列表以查看是否有用户输入

    
    #举个例子,,
    #也许一个叫“约翰·米勒”的学生有学生证
    # "8623462"
    #
    #“8623462”、“3974923”和“2973942”都是示例
    #有效学生证的有效期
    #
    登录={
    “8623462”:“密码1234”,
    “3974923”:“PA$$WORD”,
    “2973942”:“hE11oWoR1D”
    }
    def get_和_check_凭据(登录):
    """
    +--------+--------------------------------------------+
    |输出|意义|
    +--------+--------------------------------------------+
    |0 |最终用户已输入|
    ||有效的学生id和密码|
    ||允许进入|
    +--------+--------------------------------------------+
    |1 |错误1:学生id不是数字|
    +--------+--------------------------------------------+
    |2 |错误2:数据库中没有学生id|
    +--------+--------------------------------------------+
    |3 |错误3:用户名正确,但|
    ||密码错误|
    +--------+--------------------------------------------+
    只有一条路可以走对
    还有上百万种出错的方式。
    这就是为什么错误代码0表示一切正常。