예, 두 가지 대안이 있습니다.
먼저 전역을 사용하는 대신 값을 전달할 수 있습니다. 예를 들어, create_list_and_find_max_and_min 로컬 배열을 생성하고 그것을 반환 할 수 있습니다, 당신은에 the_smart_way에 전달할 수 :
import random
#----------------------------------------------#
def main():
my_array = create_list_and_find_max_and_min(10)
print the_smart_way(my_array)
#----------------------------------------------#
def create_list_and_find_max_and_min(n):
my_array = []
n = input("How many numbers do you want in your array?:")
for i in range(n):
my_array.append(random.randint(1,n))
print "My array is:", my_array
#----------------------------------------------#
min = my_array[0]
for number in my_array:
if min > number:
min = number
print "The minimum value in the array is:", min
#----------------------------------------------#
max = my_array[0]
for number in my_array:
if max < number:
max = number
print "The maximum value in the array is:", max
return my_array
#----------------------------------------------#
def the_smart_way(my_array):
# "This one uses the built-in Python functions for min/max..."
min_my_array = min(my_array)
max_my_array = max(my_array)
return min_my_array, max_my_array
#----------------------------------------------#
if __name__ == '__main__':
main()
둘째, 당신은 그 데이터를 운영 데이터와 기능을 캡슐화하는 클래스를 만들 수 있습니다
를
import random
#----------------------------------------------#
class MyArrayClass(object):
def create_list_and_find_max_and_min(self, n):
self.my_array = []
n = input("How many numbers do you want in your array?:")
for i in range(n):
self.my_array.append(random.randint(1,n))
print "My array is:", self.my_array
#----------------------------------------------#
min = self.my_array[0]
for number in self.my_array:
if min > number:
min = number
print "The minimum value in the array is:", min
#----------------------------------------------#
max = self.my_array[0]
for number in self.my_array:
if max < number:
max = number
print "The maximum value in the array is:", max
#----------------------------------------------#
def the_smart_way(self):
# "This one uses the built-in Python functions for min/max..."
min_my_array = min(self.my_array)
max_my_array = max(self.my_array)
return min_my_array, max_my_array
#----------------------------------------------#
def main():
my_array = MyArrayClass()
my_array.create_list_and_find_max_and_min(10)
print my_array.the_smart_way()
#----------------------------------------------#
if __name__ == '__main__':
main()
이유를 이해해야합니다. 전역 변수는 나쁜 습관입니다.
두 개의 배열을 만들고 싶다고 상상해보십시오. 전역 변수를 사용하면 두 번째 변수가 첫 번째 변수를 대체하게되며, 이는 영원히 사라질 것입니다. 지역 변수와
create_list_and_fix_max_and_min(10)
create_list_and_fix_max_and_min(20)
# No way to operate on the original array!
, 당신은 그들 모두를 저장할 수 있습니다 : 객체를 사용
는
my_array_1 = create_list_and_fix_max_and_min(10)
my_array_2 = create_list_and_fix_max_and_min(20)
the_smart_way(my_array_1)
같은 이점을 제공; 둘의 차이는 궁극적으로 작업이 데이터의 의미에 속하는지 또는 데이터가 단독으로 작동하는지 또는 작업이 일반적인지 여부에 달려 있습니다.
import random
#----------------------------------------------#
def main():
# note that input can be dangerous since it evaluates arbitrary code
n = int(raw_input("How many numbers do you want in your array?: "))
my_list = [random.randint(1, n) for _ in range(n)]
find_max_and_min(my_list)
the_smart_way(my_list)
#----------------------------------------------#
def find_max_and_min(seq):
print "My array is:", seq
#----------------------------------------------#
min_num = seq[0] # Don't want to use same names as bultins here
for number in seq:
if number < min_num:
min_num = number
print "The minimum value in the array is:", min_num
#----------------------------------------------#
max_num = seq[0]
for number in seq:
if number > max_num:
max_num = number
print "The maximum value in the array is:", max_num
#----------------------------------------------#
def the_smart_way(seq):
# "This one uses the built-in Python functions for min/max..."
# No need for temp variables here
print min(seq), max(seq)
#----------------------------------------------#
if __name__ == '__main__':
main()
는 질문을 수정하십시오 : 여기 말했다되고 그건
, 나는이 문제를 공격 할 방법이다. 귀하의 답변이있을 경우 사용자의 답변에 대한 의견을 게시하십시오. – Blender
죄송합니다. 문제를 해결하기 위해 코드를 업데이트하려고 시도했지만 여전히 오류가 발생하고 있음을 지적합니다. :/ –