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”