python3에서 키 값 쌍의 지속적인 집합을 저장하기 위해 전역 사전을 만들려고합니다. 어떤 이유로 나는 말한다 :이 나에게 오류를주고 내가 왜 이해가 안python3에서 글로벌 dict 사용 시도
#!/usr/bin/env python3
from sys import stdin
from math import sqrt
d = {}
def dict_check(num) :
print (num)
if len(num) != 2:
num1 = num2 = num[0]
else :
num1,num2 = num
print(num1,num2)
primes = []
if num1 > num2 :
num1, num2 = num2, num1
if not num2 in d:
while num2 >= 1 :
if num2 in d:
primes += d[num2]
break
else :
if is_prime(num2) :
primes += [num2]
num2 -= 1
d += {num2:primes}
newList = []
print(d)
for l in d[num2] :
if l < num1 :
break
newList += [l]
return sorted(newList)
def is_prime (n) :
assert n > 0
if n == 1 :
return False
if n == 2 :
return True
if (n % 2) == 0 :
return False
for i in range(3, int(sqrt(n)) + 1, 2) :
if (n % i) == 0 :
return False
return True
if __name__ == "__main__" :
inPut = ([int(v) for v in s.split()] for s in stdin)
m = [dict_check(i) for i in inPut]
for v in zip(*m) :
v = v
print(v[0])
:
1 10
[1, 10]
1 10
Traceback (most recent call last):
File "prime1.py", line 51, in <module>
m = [dict_check(i) for i in inPut]
File "prime1.py", line 51, in <listcomp>
m = [dict_check(i) for i in inPut]
File "prime1.py", line 17, in dict_check
if not num2 in d:
UnboundLocalError: local variable 'd' referenced before assignment
가 여기 내 코드입니다. 나는 그것을 def 밖에서 선언 했으므로 전역 적이어야한다. 나는이 일을 전에했는데 일하는 것 같지 않습니다.
글로벌 * 읽기 *는 의도 한대로 작동합니다. Global * writing *에는'global' 키워드가 필요합니다. 이것은 여기에 답변 : http://stackoverflow.com/a/423596/145400 –
[가능한 그들을 생성 한 이외의 함수에서 전역 변수를 사용하여] 중복 (http://stackoverflow.com/questions/423379/) 사용하는 것 이외의 함수에서 전역 변수 사용하기 –
'+'를 사용하여 dict에 항목을 추가 할 수 있다고 생각하지 않습니다. 'd [num2] = primes'을하려고하십니까? – Kevin