【问题标题】:How do I insert dictionary values into a parameter如何将字典值插入参数
【发布时间】:2021-04-23 04:17:10
【问题描述】:

我是python的初学者,有一个问题。

我创建了一个包含三个值的字典。 我想将这些值插入到函数的参数中(pii: 查看整个代码),以便它们每 5 个时间步(整个时间步 50)更改一次。

如果您有任何想法,请告诉我。 谢谢

- time step 1~5 C value is "5"      key "0"  (1st value)
# - time step 6~10 C  value is "10"   key "1"(2nd value)
# - time step 11~15 C  value is "15"   key "2"(3rd value )
# - time step 16~20  value C is "5" key "0"( 1st value)
# - time step 21~25  value C is "10"  key "1" (2nd value )....

完整代码

from matplotlib import pyplot as plt
import numpy as np
from scipy import integrate

def degrees_to_radians(theta_d,pii):

"""
Convert an angle from degrees to radians.
Parameters
----------

theta_d : float
    The angle in degrees.

Returns
-------

theta_r : float
    The angle in radians.
"""
theta_r = pii / 180.0 * theta_d
return theta_r


# I want to insert the values from this dictionary into pii.
# When inserting, each value must change every 5 timesteps.
# 
# Example
#  
# - time step 1~5 C value is "5"      key "0"  (1st value)
# - time step 6~10 C  value is "10"   key "1"(2nd value)
# - time step 11~15 C  value is "15"   key "2"(3rd value )
# - time step 16~20  value C is "60" key "0"( 1st value)
# - time step 21~25  value C is "5"  key "1" (2nd value )....

#dictionary TUA
# TUA={"0":5,
# "1":10,
# "2":15,
#}

for n in range(1,50):
    #pii=3.14
    print(degrees_to_radians(15*n,pii))

【问题讨论】:

  • 请做一个可重现的最小例子。
  • 您能否更详细地告诉我最小可重复性意味着什么?我以为我把它尽可能简单了,但是如果你有什么不明白的地方,请告诉我更详细的问题。谢谢。
  • 数学既可怕又具体。摆脱欧拉方法,专注于您的编程问题! AEA 看起来很复杂,你能不能把它简化成只需要2个参数?你能简化计算,也许只是把参数加起来?您的代码示例不需要有意义/具有真实世界的用例,我们只需要看看您在 Python 中尝试做什么。 (for循环也一样,你不需要864次迭代来说明你的问题)
  • 这样更好吗???
  • 这好多了!您仍然可以取消注释 TUA 并修复 degrees_to_radians 的缩进。但我想我已经知道你的意思了。还有一件事:你使用 Python 2 还是 Python 3?

标签: python function loops dictionary


【解决方案1】:

如果我理解正确,您想迭代 n 次,但对 k (=5) 连续循环使用相同的键。

所以你需要一种映射方式

x key
1.. 5 0
6..10 1
11..15 2
16..20 3

以此类推

这里的神奇词是integer division

f(x) = x // 5 会映射

x f(x)
0..4 0
5..9 1
10..14 2
15..19 3

等等。
这不是你想要的,但f(x) = (x-1) // 5 是!

所以你可以写

for i in range(1,50):
    index = (i - 1) // 5
    pii = TUA[str(index)]
    degrees_to_radians(pii)

但还有一个问题:您不想将 16..20 映射到 3,而是想再次从 0 开始。可以做什么? Modulog(x) = x % 3 会将 0,3,6,9,.. 全部映射到 0。

【讨论】:

  • 感谢您的回答。我通过像这样设置'index = ((i-1) // 5)%3'解决了这个问题。你救了我的命。上帝保佑你!!
猜你喜欢
  • 1970-01-01
  • 2021-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多