【问题标题】:Is there a way to use a for loop to make this more concise?有没有办法使用 for 循环使其更简洁?
【发布时间】:2019-11-26 14:24:57
【问题描述】:
def rydbergEquation(finalEnergyLevel, initialEnergyLevel):
  return ((1.0974 * 10**7) * (1 / (finalEnergyLevel**2)) - (1 / (initialEnergyLevel**2)))**-1

print("Energy Level (2 to 1):     ", rydbergEquation(1, 2))
print("Energy Level (3 to 1):     ", rydbergEquation(1, 3))
print("Energy Level (4 to 1):     ", rydbergEquation(1, 4))
print("Energy Level (5 to 1):     ", rydbergEquation(1, 5))
print("Energy Level (6 to 1):     ", rydbergEquation(1, 6))
print("Energy Level (7 to 1):     ", rydbergEquation(1, 7))
print("Energy Level (3 to 2):     ", rydbergEquation(2, 3))
print("Energy Level (4 to 2):     ", rydbergEquation(2, 4))
print("Energy Level (5 to 2):     ", rydbergEquation(2, 5))
print("Energy Level (6 to 2):     ", rydbergEquation(2, 6))
print("Energy Level (7 to 2):     ", rydbergEquation(2, 7))
print("Energy Level (4 to 3):     ", rydbergEquation(3, 4))
print("Energy Level (5 to 3):     ", rydbergEquation(3, 5))
print("Energy Level (6 to 3):     ", rydbergEquation(3, 6))
print("Energy Level (7 to 3):     ", rydbergEquation(3, 7))
print("Energy Level (5 to 4):     ", rydbergEquation(4, 5))
print("Energy Level (6 to 4):     ", rydbergEquation(4, 6))
print("Energy Level (7 to 4):     ", rydbergEquation(4, 7))
print("Energy Level (6 to 5):     ", rydbergEquation(5, 6))
print("Energy Level (7 to 5):     ", rydbergEquation(5, 7))
print("Energy Level (7 to 6):     ", rydbergEquation(6, 7))

我可以删除 21 个print 语句并创建一个 for 循环来输出给定的值吗?

我似乎无法找到一种方法来循环该函数以获得不同能级变化的输出。我假设您可以遍历范围并输出给定​​的值,但是我很难找到正确的方法来执行此操作,而不会使输出看起来有偏差。

通过使用某种双 for 循环,我可以看到它在工作。

解决方案: itertools 有一个很好的组合方法,我最终使用了。

【问题讨论】:

    标签: python python-3.x loops for-loop repeat


    【解决方案1】:

    您可以为此目的使用itertools.combinations

    import itertools as it
    
    for i, j in it.combinations(range(1, 8), r=2):
        print(f"Energy Level ({j} to {i}):     ", rydbergEquation(i, j))
    

    【讨论】:

    • @CygnusGames 这只是替换了 21 个 print 调用。
    【解决方案2】:

    Itertools 可能更好,但对于小情况,您可能可以通过使用双 for 循环来获得:

    for i in range(6):
        for j in range(i+1, 7):
            print(f"Energy Level ({i+1} to {j+1}):     ", rydbergEquation(i+1, j+1))
    

    用这个替换你所有的打印语句。

    【讨论】:

    • 谢谢,应该为带有 f 字符串的 Python 版本修复。
    • @aganders3 这永远不会跑到j == 7,而不是OP。
    • @aganders3 抱歉,反过来,你从i+1 开始j 然后使用j+1;这会跳过j 的第一个值。
    猜你喜欢
    • 2023-03-04
    • 1970-01-01
    • 2011-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多