Python 如何使用for循环获取字典中键的用户输入值?

Python 如何使用for循环获取字典中键的用户输入值?,python,dictionary,Python,Dictionary,我试图简化这段代码,计算每月的总体重减轻量和平均体重减轻量: months = input("How many months have you been trying to lose weight?: ") def weeks(): week1 = input("How many lbs did you lose in your first week?: ") week2 = input("How many lbs did you lose in your second wee

我试图简化这段代码,计算每月的总体重减轻量和平均体重减轻量:

months = input("How many months have you been trying to lose weight?: ")

def weeks():
    week1 = input("How many lbs did you lose in your first week?: ")
    week2 = input("How many lbs did you lose in your second week?: ")
    week3 = input("How many lbs did you lose in your third week?: ")
    total_weight_lost = (week1)+(week2)+(week3)
    return total_weight_lost,
我可以用字典或列表来做这件事吗?大概是这样的:

def weeks():
    d = {"week1": 0, "week2": 0, "week3": 0}
    for k in d:
        total_weight_lost = input(" How much weight did you lose in", d, "?:")
    return total_weight_lost,
def weeks():
    total_weight_lost = 0
    for week in xrange(1, 4):
        total_weight_lost += int(input("How much weight did you lose in week {}?".format(week)))
    return total_weight_lost

我知道这是完全错误的,但我想可能有办法做到这一点。因此,我可以迭代字典中的键,让用户提供值,而不必为“week1”、“week2”和“week3”编写同一行代码。不仅如此,我还想每个月都重复这个功能,用户说他们试图减肥,然后计算总数。

如果不使用这些值,就不需要字典。在这种情况下,您可以使用元组或列表,如下所示:

def weeks():
    d = ["week1", "week2", "week3"]
    total_weight_lost = 0
    for k in d:
        total_weight_lost += int(input(" How much weight did you lose in", d, "?:"))
    return total_weight_lost,
更简单的可能是这样的:

def weeks():
    d = {"week1": 0, "week2": 0, "week3": 0}
    for k in d:
        total_weight_lost = input(" How much weight did you lose in", d, "?:")
    return total_weight_lost,
def weeks():
    total_weight_lost = 0
    for week in xrange(1, 4):
        total_weight_lost += int(input("How much weight did you lose in week {}?".format(week)))
    return total_weight_lost

如果不使用这些值,则不需要词典。在这种情况下,您可以使用元组或列表,如下所示:

def weeks():
    d = ["week1", "week2", "week3"]
    total_weight_lost = 0
    for k in d:
        total_weight_lost += int(input(" How much weight did you lose in", d, "?:"))
    return total_weight_lost,
更简单的可能是这样的:

def weeks():
    d = {"week1": 0, "week2": 0, "week3": 0}
    for k in d:
        total_weight_lost = input(" How much weight did you lose in", d, "?:")
    return total_weight_lost,
def weeks():
    total_weight_lost = 0
    for week in xrange(1, 4):
        total_weight_lost += int(input("How much weight did you lose in week {}?".format(week)))
    return total_weight_lost

考虑到您想询问大约三周,那么您可以简单地创建一个循环,多次询问用户。只需对字符串稍加修改,就可以在不需要词典的情况下实现这一点,方法如下:

def weeks():
    total_weight_lost = 0
    for i in range(1, 4):
        total_weight_lost += int(input("How many lbs did you lose in week {}?: ".format(i)))
    return total_weight_lost
因此,我们现在在该方法中所做的是从1开始迭代,并要求用户每周输入一个数字。字符串稍有更改,所以现在我们将使用循环迭代器中的每个数字来输出需要输入的周数。对于每个条目,我们只需保持运行总和。然后返回最终结果

从上述解决方案中,可以阅读以下内容:

  • 在阅读了问题中的评论之后,我想添加一个答案的小变体,以帮助澄清Blckknght提出的方法,该方法将固定数字作为参数,并将多次询问用户

    例如,如果用户说他们想输入他们在10周内减掉了多少体重,那么我们将循环10次以获取条目,我们可以做到这一点,我对方法做了一点修改,使其提供更多的上下文,并进行论证。因此,
    weeks()
    现在可以定义为:

    total_weightloss(weeks):
    
    现在,该方法将采用一个名为
    weeks
    的参数,我们循环该数字:

    def total_weightloss(weeks):
        total_weight_lost = 0
        for i in range(1, weeks + 1):
            total_weight_lost += int(input("How many lbs did you lose in week {}?: ".format(i)))
        return total_weight_lost
    
    演示:

    How many lbs did you lose in week 1?: 1
    How many lbs did you lose in week 2?: 2
    How many lbs did you lose in week 3?: 2
    How many lbs did you lose in week 4?: 2
    How many lbs did you lose in week 5?: 1
    How many lbs did you lose in week 6?: 2
    How many lbs did you lose in week 7?: 1
    How many lbs did you lose in week 8?: 1
    How many lbs did you lose in week 9?: 2
    How many lbs did you lose in week 10?: 1
    15
    

    您可以对此进行的下一个修改是错误处理。您可以查看如何修改此方法以确保它只接受整数,以及如果它接受非整数值会发生什么情况。再看看,了解如何处理这些可能出现的错误

    考虑到你想询问大约三周,那么你可以简单地创建一个循环,向用户询问那么多次。只需对字符串稍加修改,就可以在不需要词典的情况下实现这一点,方法如下:

    def weeks():
        total_weight_lost = 0
        for i in range(1, 4):
            total_weight_lost += int(input("How many lbs did you lose in week {}?: ".format(i)))
        return total_weight_lost
    
    def weeks():
        d = {"week1": 0, "week2": 0, "week3": 0}
        for i in sorted(d.keys()): 
            total_weight_lost = input(" How much weight did you lose in"+ i+ "?:")
            d[i] = total_weight_lost
        return d
    
    因此,我们现在在该方法中所做的是从1开始迭代,并要求用户每周输入一个数字。字符串稍有更改,所以现在我们将使用循环迭代器中的每个数字来输出需要输入的周数。对于每个条目,我们只需保持运行总和。然后返回最终结果

    从上述解决方案中,可以阅读以下内容:

  • 在阅读了问题中的评论之后,我想添加一个答案的小变体,以帮助澄清Blckknght提出的方法,该方法将固定数字作为参数,并将多次询问用户

    例如,如果用户说他们想输入他们在10周内减掉了多少体重,那么我们将循环10次以获取条目,我们可以做到这一点,我对方法做了一点修改,使其提供更多的上下文,并进行论证。因此,
    weeks()
    现在可以定义为:

    total_weightloss(weeks):
    
    现在,该方法将采用一个名为
    weeks
    的参数,我们循环该数字:

    def total_weightloss(weeks):
        total_weight_lost = 0
        for i in range(1, weeks + 1):
            total_weight_lost += int(input("How many lbs did you lose in week {}?: ".format(i)))
        return total_weight_lost
    
    演示:

    How many lbs did you lose in week 1?: 1
    How many lbs did you lose in week 2?: 2
    How many lbs did you lose in week 3?: 2
    How many lbs did you lose in week 4?: 2
    How many lbs did you lose in week 5?: 1
    How many lbs did you lose in week 6?: 2
    How many lbs did you lose in week 7?: 1
    How many lbs did you lose in week 8?: 1
    How many lbs did you lose in week 9?: 2
    How many lbs did you lose in week 10?: 1
    15
    
    您可以对此进行的下一个修改是错误处理。您可以查看如何修改此方法以确保它只接受整数,以及如果它接受非整数值会发生什么情况。再看看,了解如何处理这些可能出现的错误

    def weeks():
        d = {"week1": 0, "week2": 0, "week3": 0}
        for i in sorted(d.keys()): 
            total_weight_lost = input(" How much weight did you lose in"+ i+ "?:")
            d[i] = total_weight_lost
        return d
    
    你可以用这个

    print sum(weeks.values())
    
    你可以用这个

    print sum(weeks.values())
    

    如果您需要使用字典来跟踪每周的体重(即,可能您以后需要这些值来执行其他计算),您可以这样做

    weeks = {"week1": 0, "week2": 0, "week3": 0}
    
    for key in weeks:
        total_weight_lost = input(" How much weight did you lose in {}".format(key))
        weeks[key] = float(total_weight_lost)
    
    #total weight lost over all weeks
    print sum(weeks.values())
    

    但是,如果您只需要减去的总体重的总和,那么您可以使用其他答案之一。

    如果您需要使用字典跟踪每周的体重(即,可能您以后需要这些值来执行其他计算),您可以这样做

    weeks = {"week1": 0, "week2": 0, "week3": 0}
    
    for key in weeks:
        total_weight_lost = input(" How much weight did you lose in {}".format(key))
        weeks[key] = float(total_weight_lost)
    
    #total weight lost over all weeks
    print sum(weeks.values())
    

    然而,如果你只需要减去的总体重的总和,那么你可以使用其他答案。

    我真的不明白,在你的功能中,月数问题与你所问的三周有什么关系。如果你在追踪每周的减肥情况,为什么要问几个月?如果你每个月调用一次函数,你可能至少需要四周(如果不是更复杂的代码,有时需要五周,这取决于该日历月一周的天数)。如果您坚持使用单一时间单位(周或月)这会容易得多。周的顺序重要吗?@Blckknght我试图计算每个月的平均体重减轻量以及总体重减轻量,因此我试图找出一种方法,使该功能运行的次数与用户数月的输入次数相同,但我不知道如何存储总体重减轻量每个月在单独的变量中运行,然后在以后的另一个函数中使用,该函数将汇总每个月的所有总计并计算