Python 字典迭代赢得';我跑不动

Python 字典迭代赢得';我跑不动,python,dictionary,enumerate,forex,currency-exchange-rates,Python,Dictionary,Enumerate,Forex,Currency Exchange Rates,因此,我试图编写一段代码,允许您1)输入短语2)输入一个字符串,其中包含要从和转换为这两种货币的汇率(例如美元-欧元;欧元-英镑) 如果您输入“我有300美元,然后我有400美元,”(1),“USD EUR”(2)和4(3),它应该返回“我有300美元(~900欧元),然后我有400美元(~1600欧元) 但是,我下面的代码仅将第一次引用“转换”为USD(USD 300,但不是USD 400),返回“我有USD 300(~EUR 900),然后我有USD 400”。我不确定我做错了什么。如果您看

因此,我试图编写一段代码,允许您1)输入短语2)输入一个字符串,其中包含要从和转换为这两种货币的汇率(例如美元-欧元;欧元-英镑)

如果您输入“我有300美元,然后我有400美元,”(1),“USD EUR”(2)和4(3),它应该返回“我有300美元(~900欧元),然后我有400美元(~1600欧元)

但是,我下面的代码仅将第一次引用“转换”为USD(USD 300,但不是USD 400),返回“我有USD 300(~EUR 900),然后我有USD 400”。我不确定我做错了什么。如果您看到我的代码中有错误,请让我知道!提前感谢:)


另外,我知道这不是一种特别有效的方法,但我只是想测试一下:)

这是可行的,但也有问题。“400”结尾的标点符号被用作数字的一部分。这没关系,但它会造成一个尴尬的句子。但它可以给你基本的想法

phrase = "I had USD 300 and then I had USD 400."
currency = "USD EUR"
ratio = 4

new = []
handle = False
for word in phrase.split():
    new.append( word )
    if word == currency.split()[0]:
        handle = True
    elif handle:
        convertednumber = int(float((word))) * int(float(ratio))
        new.append( f'(~{currency.split()[1]} {convertednumber})')
        handle = False

print(' '.join(new))

请提供预期结果。显示中间结果与预期结果的偏差。我们应该能够将单个代码块粘贴到文件中,运行它,并重现您的问题。这还允许我们在您的上下文中测试任何建议。您发布的程序挂起等待输入。不要期望我们提供测试数据:simp请用引发问题的测试用例替换您的
输入
。我们还希望您能够在错误点之前跟踪可疑值。您对这些值是如何得到这些值感到困惑吗?您确实知道
否则:
/
通过
是无用的,可以删除,是吗?问题的一大部分在于此在迭代时修改
z
。这不起作用。另一个大问题是
firstplace=z.index(i)
总是会找到第一次出现的USD。真的,你需要一个接一个地处理单词,并将每个单词复制到一个新的列表中。@Prune非常感谢你和我的道歉。我编辑了这篇文章。谢谢!这真的很有帮助,并且完成了这项工作!我有点不确定程序如何在USD之后插入~EUR 1200300美元,而不仅仅是美元(我在读了你的代码后期望后者,但它能工作)我想我明白了-你的代码在句子中找到美元,再运行一次迭代(我们在列表中添加了300美元),然后添加转换后的数字。谢谢!是的。只需设置一点“状态”“记住。顺便说一下,我的代码第1版完全按照你说的做了。“400美元(~1200欧元)”。
phrase = "I had USD 300 and then I had USD 400."
currency = "USD EUR"
ratio = 4

new = []
handle = False
for word in phrase.split():
    new.append( word )
    if word == currency.split()[0]:
        handle = True
    elif handle:
        convertednumber = int(float((word))) * int(float(ratio))
        new.append( f'(~{currency.split()[1]} {convertednumber})')
        handle = False

print(' '.join(new))