如何遍历列表并创建/保存变量
如果我有一个列表
subjects = ['Tests', 'Assignments', 'Quizzes']
for i in subjects:
i = raw_input("What percentage do {} make up your grade \n".format(i))
我知道这段代码是行不通的(我试过了),但我想知道怎么做:1) 遍历一个列表 2) 创建一个变量 3) 把数据保存到那个变量里
最后我想用这些变量来计算其他数据
tests = x%
assignments = x%
quizzes = x%
2 个回答
0
你可以在这里使用列表推导和变量解包的技巧,像这样:
subjects = ['Tests', 'Assignments', 'Quizzes']
format_str = "What percentage do {} make up your grade \n"
tests, assignments, quizzes = [raw_input(format_str.format(i)) for i in subjects]
这样做会为每个类别获取数据,并准备一个列表。因为我们知道这个列表只会有三个元素,所以我们可以很方便地把这些值解包到左边的三个变量里。
默认情况下,raw_input
会返回字符串。如果你想把用户输入的内容转换成数字,可以这样转换:
formatter = "What percentage do {} make up your grade \n".format
tests, assignments, quizzes = [float(raw_input(formatter(i))) for i in subjects]
0
thefourtheye 提出的解决方案可以解决你的问题,但它并不太适合大规模使用。假设你现在有 20 个主题,而不是 3 个,这样你就得手动创建 20 个变量了:
A, B, C, D, ... = [float(raw_input(formatter(i))) for i in subjects]
用一个映射(map)来替代,绝对是更好的选择。这样就不需要为每个主题字符串单独创建一个变量了:
score_map = {'Tests' : 0, 'Assignments' : 0, 'Quizzes' : 0}
for subject in score_map:
score_map[subject] = float(raw_input("What percentage do {} make up your grade \n".format(subject)))
# Now you can access each score
for subject in score_map:
print "{0} makes up {1} percent".format(subject, score_map[subject])