Python:如何创建if / while循环以继续创建变量/字典

时间:2014-09-16 21:28:42

标签: python loops

首先,我对python有一个适度的理解,但对它的所有语法知之甚少。

问题:如何创建一个不断创建变量的if或while循环(通过预定义函数为每个变量分配一个字典)?或者其他可能是更好主意的东西。基本上是:

if "keep_entering":
    #create a new dictionary based on what user inputs
else:
    #take all the dictionaries that have been made and put them into a list
    #I already have a function to do this though

所以我看到了这个问题,但不是我要求的范围。我有一个字典列表,只是因为我希望该字典中的某些键只与该特定字典绑定。

例如,每个字典都是学生,在学生字典中,谎言键代表他们的姓氏,名字,考试成绩等等(基本上是整数和字符串的组合),但显然我想要那些与该学生的姓名和其他信息(如地址或电话号码)保持联系。我不能只用一堆名字和等级等制作一本大字典,据我所知,它不会将所有信息保持在一起。

{first: 'john', last: 'doe', score: 87}

还需要考虑的是学生词典中有一个特定的关键词,即可用性。它是一个时间列表(作为整数,所以只有一个小时的尖锐)它们可用于我将在一个单独的循环中阅读的内容。进一步说明我需要每个词典中的所有信息保持链接在一起,而且就我所知,我不能再制作一个大词典。

{first: 'john', last: 'doe', score: 87, availability: [2,3,7,8,9]}

当然,我想是否/同时"某事"是真的(基本上当有人仍在输入关于学生的信息时,比如他们的姓名和成绩等信息),我需要它来创建一个新的变量,并为其分配一个包含所有这些信息的字典(通过已经预定义的函数)。一旦"某事"是假的我会将这些变量编译成一个我已经知道如何做的列表。

那么我们在这里,非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

首先,我建议您使用班级(https://docs.python.org/2/tutorial/classes.html)而不是字典作为学生记录。从长远来看,类将为您的代码添加更多结构。将字典想象成一个更“自由形式的查找表”(或哈希表,如果你愿意......因为它们就是这样)。

class Student(object):
    def __init__(self, first, last, score):
        self.first = first
        self.last = last
        self.score = score
        self.availability = []
    def add_availability(self, availability_time):
        # make sure it's an integer
        if ( not isinstance( availability_time, int ) ):
            return False
        # check bounds
        if ( availability_time < 1 || availability_time > 10 ):
            return False
        # it checks out, add it up
        self.availability.push(availability_time)
        return True

那你的主循环......

students = []
while more_students:
    # first = ..logic for first name..
    # last = ..logic for last name..
    # score = ..logic for score..
    stud = Student(first,last,score)
    availability_text = ..get input..
    while availability_text != 'quit' #change to whatever termination text/method you want
         if not stud.add_availability(availability_text):
              print 'There was an error!'
         availability_text = ..get input..
    students.push(stud)

答案 1 :(得分:0)

我已经启动了一个可以帮助你移动的代码.. 请检查下面。 如果您有任何疑问,请不要犹豫。 我没有写完整的解决方案..这已经过了午夜...... :) 您将不得不在主函数中更改您的数据文件名/位置...

此致

- 代码从这里开始 -

import os

def clrscr_():
    os.system('clear') #Check for compatibility with your OS

def prnt_menu():
    a = 'z'
    while (a not in '01234'):
        clrscr_()
        print 'Main Menu:\n----------'
        print '1 - Print DataBase'
        print '2 - Append to DataBase'
        print '3 - Edit Item'
        print '4 - Delete Item'
        print '0 - Exit'
        print ''
        a = raw_input('Your Choice: ')
    return a

def ask_to_create_empty_database_file(fname):
    a = 'z'
    print ('Would you like me to create empty database file for you?')
    while (a not in 'yYnN'):
        a = raw_input('(y = yes / n = no)')
    if (a in 'yY'):
        file(fname, 'w').close()

def print_database(fname, ttl):
    if (os.path.isfile(fname)):
        clrscr_()
        print '  | ',
        for it in ttl:
            print it, ' | ',
        print '\n'
        f = file(fname, 'r')
        content = f.readlines()
        content = [x.strip('\n') for x in content]
        f.close()
        for ln in content:
            print ln        
        print '\n'
        raw_input('Press Enter key to continue!')
    else:
        print 'Error! Database file does not Exist.'
        ask_to_create_empty_database_file(fname)

def append_to_database(fname, ttl):
    rVal = []
    for it in ttl:
        a = raw_input(it + ': ')
        rVal.append(a)
    f = file(fname, 'a')
    f.write(str(rVal))
    f.write('\n')
    f.close()
    print '\n'
    raw_input('Press Enter key to continue!')

def main():
    file_path = '/path/to/database.dat'
    titles_ = ['ID', 'First', 'Last', 'Phone', 'Score', 'Availability']
    stop_ = False
    while (not stop_):
        menu_ = prnt_menu()
        if (menu_ == '1'):
            print_database(file_path, titles_)
        elif (menu_ == '2'):
            append_to_database(file_path, titles_)
        elif (menu_ == '3'):
            #I leave this menu for you :)
            pass
        elif (menu_ == '4'):
            #I leave this menu for you :)
            pass
        else:
            print 'Good Bye! Program exited Safely.\n'
            stop_ = True

if __name__ == '__main__':
    main()