字典中键值对中的值中的变量



假设我们有dictionary = ['a':x*2,'b':x*3],并将x设置为2。当我在完成这项任务后打印出字典时,我得到的是上面显示的那个,而不是['a':4,'b':6]。为什么?我目前正试图为Project Euler练习69想出一个解决方案(https://projecteuler.net/problem=69)为此,我制作了以下内容:

import math
from sympy import Symbol
magic_book={1:1,2:1}
maximum=0
for n in range(3,10**6+1):
print(magic_book)
print(n)
if n in magic_book:
if (n/magic_book[n])>maximum:
maximum=n/magic_book[n]
continue

Phi=0
x = Symbol('x')

for m in range(1,n):
if math.gcd(n,m)==1:
magic_book[n*m]=x*magic_book[m]
Phi+=1
x=Phi
if n/Phi>maximum:
maximum=n/Phi

print(maximum)

当我将x设置为等于Phi时,magic_book不会更新——为什么会这样?

当您在Python中编辑对象时,它不会返回并更改您之前使用它所说的内容。例如:

x = 1
double_x = 2*x
x = 10

你的问题基本上是问为什么double_x不是20。

如果要处理SymPy对象,为了用其他值(如数值(替换符号值,.subs()通常是最佳选项。但是,字典不是SymPy对象,也没有.subs()方法。然后,您必须循环遍历字典并替换其值,如下所示:

for k, v in magic_book.items():
maximum[k] = v.subs(x, Phi)  # assuming v is a SymPy object

最新更新