如何遍历列表并创建/保存变量

1 投票
2 回答
2348 浏览
提问于 2025-04-18 14:32

如果我有一个列表

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])

撰写回答