首先,我对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]}
当然,我想是否/同时"某事"是真的(基本上当有人仍在输入关于学生的信息时,比如他们的姓名和成绩等信息),我需要它来创建一个新的变量,并为其分配一个包含所有这些信息的字典(通过已经预定义的函数)。一旦"某事"是假的我会将这些变量编译成一个我已经知道如何做的列表。
那么我们在这里,非常感谢任何帮助。
答案 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()