如何使用输入作为变量名?

时间:2019-05-19 11:10:18

标签: python python-3.x dictionary input

我有这个字典:

exercise_name = {
            "sets": 3,
            "reps": 12,
            "weight": 100
}

我知道我可以通过以下方式获得用户输入:

exercise_name = input("Insert Exercise Name: ")

但是如何将字典直接分配给输入? 像这样:

input("Insert Exercise Name: ") = {
    "sets": 3,
    "reps": 12,
    "weight": 100
}

我还想知道如何使用列表,集合等。

1 个答案:

答案 0 :(得分:2)

不要

您如何在程序中知道如何解决该问题?如果用户“自定义”变量名称?听起来像xy-problem

您也可以将用户输入存储在字典中:

sillyDict = { input("Insert name") : { "sets": 3, "reps": 12, "weight": 100}}

但目的何在-您将如何使用呢?如果您想使用该名称进行任何操作,则需要了解该名称或遍历整个字典。


您似乎真正需要的是classeslists

class Exercise: 
    """Capsules data for one exercise. sets/reps/weigh have defaults."""

    def __init__(self, name, sets = 3, reps = 12, weight = 100):
        """'name'd exercise with sets/reps/weight - using defaults:
        sets = 3, reps = 12, weight = 100"""
        self.name = name
        self.sets = sets
        self.reps = reps
        self.weight = weight

    def __str__(self):
         """Friendly representation of this exercise"""
         return f"{self.name}: {self.sets} sets of {self.reps} reps with {self.weight} kg"

    def __repr__(self):
         return str(self) 

# create a plan            
plan = [ Exercise("Squats"), Exercise("BenchPress",3,5,180), Exercise("Pullups",5,22,10)]

# add one by user input (fragile) - no int-validation
plan.append( Exercise(input("What to do? "), 
                      int(input("Sets: ")), 
                      int(input("Reps: ")), 
                      int(input("Weight: "))))

for exer in plan:
    print(exer)

print(plan)

输出:

What to do? Burpies
Sets: 5
Reps: 15
Weight: 0

Squats: 3 sets of 12 reps with 100 kg       # uses the default values
BenchPress: 3 sets of 5 reps with 180 kg
Pullups: 5 sets of 22 reps with 10 kg
Burpies: 5 sets of 15 reps with 0 kg

[Squats: 3 sets of 12 reps with 100 kg, BenchPress: 3 sets of 5 reps with 180 kg, 
 Pullups: 5 sets of 22 reps with 10 kg, Burpies: 5 sets of 15 reps with 0 kg]