Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在多次循环迭代后获得值_Python_Python 3.x_Loops - Fatal编程技术网

Python 如何在多次循环迭代后获得值

Python 如何在多次循环迭代后获得值,python,python-3.x,loops,Python,Python 3.x,Loops,我有一个字典,我希望用户输入一个字典键和随机浮点值,然后这两个值相乘,结果存储在一个变量中。循环迭代所需次数,最后打印最终值,该值是每个循环结果的总和。 这是我的代码: dic = {"key1":340, "key2":110, "key3":337, "key4":319, "key5":42} initial_val = 0 for keys in dic: value = str(input("insert key value")) if value == "key1"

我有一个字典,我希望用户输入一个字典键和随机浮点值,然后这两个值相乘,结果存储在一个变量中。循环迭代所需次数,最后打印最终值,该值是每个循环结果的总和。 这是我的代码:

dic = {"key1":340, "key2":110, "key3":337, "key4":319, "key5":42}
initial_val = 0

for keys in dic:
    value = str(input("insert key value"))
    if value == "key1":
        amount = float(input("enter amount"))
        product=dic.get("key1")*amount
    elif value == "key2":
        amount = float(input("enter amount"))
        product=dic.get("key2")*amount
    elif value == "key3":
        amount = float(input("enter amount"))
        product=dic.get("key3")*amount
    elif value == "key4":
        amount = float(input("enter amount"))
        product=dic.get("key4")*amount
    elif value == "key5":
        amount = float(input("enter amount"))
        product=dic.get("key5")*amount
    elif value==None:
        product=0

    initial_val+= product

    if value=="end":
        break

print(initial_val)
问题是代码打印的值是期望结果+上一次迭代的总和。我想

 print (initial_val)
接受

initial_val += product
并再次求和,得出最终结果


问题的原因是什么?如何解决此问题?

将“if value==”end“移动到代码的开头。这样,它将在再次添加之前退出循环

您要做的是:

elif value==None or value == "end":
    product=0
dic = {"key1":340, "key2":110, "key3":337, "key4":319, "key5":42}
initial_val = 0

while True:
    value = str(input("insert key value"))
    if value == "end":  # Break before you make the product !
        break
    amount = float(input("insert amount"))
    product = amount * dic.get(value)  # Make the product if it's not the end
    initial_val += product  # Make the sum

print(initial_val)

因为在您的例子中,您一直等到循环结束时才测试
value==“end”
。但是如果
等于
“end”
,则不需要制作产品,因为没有要制作的产品

初始化
product=0
value=str(输入(“插入键值”))之后;时间仅取决于dic值,这是应该的,虽然此代码可以回答问题,提供有关此代码为什么和/或如何回答此问题的附加上下文可以提高其长期价值。感谢您提供的简化代码和解释:),但我仍然不确定我是否理解将
中断
放在代码开头如何解决问题。假设代码是原始的,假设我们有一个循环和之后,初始值=340。然后,另一个循环将340作为产品添加到初始值,现在初始值=680,只有在该程序要求输入时,我很抱歉,我真的不明白你的意思。。。每次您要求一个新的
值时,只需将
initial_val
增加
dic[value]*金额的乘积。如果
value
等于
“end”
,您希望通过退出循环来完成程序,因此出现
break
。我的意思是,为什么代码末尾的
break
语句(如果
value
等于
“end”
)的代码不能按预期工作?我真的不明白写在代码开头的
break
和写在代码结尾的
break
有什么区别。因为如果你输入
“end”
,它不是
dic
的键(
dic[“end”]
不存在)。如果您等到代码结束时才使
中断
,它将保留前一循环步骤中
产品
的前一个值(因为
If
没有
的情况,如果
“end”
),这不是您想要的。这是有道理的,但这适用于您编写的已更正代码。但操作码的情况又如何呢<其中的code>value
不需要是
dic
的键,当
value=“end”