2012-10-12 4 views
0

기본적으로 내 프로그램에서 나를 위해 여러 변수 (무제한)를 만들 수 있어야합니다.이 변수를 정의하지 않아도 코드를 통해 조작 할 수 있습니다.Python의 변수 중첩

저는 a1과 같은 변수 이름으로 문자와 숫자를 가지고 있고, 그 숫자에 1을 더하는 새로운 변수를 만드는 프로그램이 있다고 생각했습니다. 그러면 a1에서 a30 정도가됩니다. 어떻게하면 좋을까요?

내 프로그램은 다항식을 추가 할 것이고 변수 (또는 지금 목록)는 다른 단항 기호를 분리하는 것이며, 다항식에 얼마나 많은 단항 기호가 있을지 모르기 때문에 나는 다항식을 만들 수있는 방법이 필요했다. 유동적 인 숫자이므로 모노매일, 엑스트라 및 그 이하의 공간에 대한 정확한 정보를 얻을 수 있습니다. 나는 결국이 루프 할 것

# Sample polynomial set to x, the real code will say x = (raw_input("Enter a Polynomial")). 

x = '(5xx + 2y + 2xy)+ (4xx - 1xy)' 

# Isdigit command set to 't' to make the code easier to write. 
t = str.isdigit 

# Defining v for later use. 
v = 0 

# Defining 'b' which will be the index number that the program will look at. 
b = 1 

# Creating 'r' to parse the input to whatever letter is next. 
r = x [b] 

# Defining n which will be used later to tell if the character is numeric. 
n = 0 

# Defining r1 which will hold one of the monomials, (**will be replaced with a list**) 

#This was the variable in question. 
r1 = '' 

# Setting 'p' to evaluate if R is numeric (R and T explained above). 
p = t(r) 

# Setting 'n' to 1 or 0 to replace having to write True or False later. 
if p == True: 
    n = 1 
else: 
    n = 0 

# Checking if r is one of the normal letters used in Algebra, and adding it to a variable 
if r == 'x': 
    v = 'x' 
    c = 1 
elif r == 'y': 
    v = 'y' 
    c = 1 
elif r == 'z': 
    v = 'z' 
    c = 1 

# If the character is a digit, set c to 0, meaning that the program has not found a letter yet (will be used later in the code). 
elif n == 1: 
    v = r 
    c = 0 

# Adding what the letter has found to a variable (will be replaced with a list). 
r1 = r1 + v 

b = b + 1 

:

여기에 코드입니다.

코드에 주석을 추가하여 이해하기 쉽습니다.

+5

명이 배열을 발명 한 이유는 ... 파이썬에서 – none

+1

는, 이것이''list'' 또는''set''입니다 :

여기에 코드입니다. 더 이상 시도하기 전에 언어의 기초를 배우는 것이 좋습니다 - 데이터 구조는 매우 기본적인 개념입니다. –

+0

목록과 변수의 차이점을 알고 있습니다. 변수가 필요합니다. 질문을 읽었습니까? 기본 사항을 알고 있습니다. 목록에 대한 모든 것을 읽었습니다. – Nick

답변

5

기본적으로 프로그래밍 방식으로 변수를 저장하는 힙 공간을 동적으로 수정하려고합니다. 나는 이것이 가능하다고 생각하지 않는다. 그것이 그렇다면, 그것은 매우 모호합니다.

내가 어디에서 왔는지 알고 있습니다. 처음 프로그램을 배울 때 "동적으로 생성 된"변수가 필요한 방식으로 문제를 해결할 생각이었습니다. 솔루션은 실제로 어떤 종류의 (수집) 데이터 구조가 사용자 요구에 적합한 지 인식하는 것입니다.

a1에서 a30까지 변수를 원하는 경우 a 목록을 만듭니다. 그런 다음 a1a[1], a30a[30]이됩니다. 글쓰기는 조금 다르지만 필요한 행동을 제공해야합니다.

+1

파이썬에서 변수를 동적으로 생성하는 것이 가능합니다 (모든 것이 가능합니다!). 그것은'globals()'와'locals()'(다른 것들 중에서)가있는 것입니다. 일반적으로 더 나은 방법이 있습니다. 또한,리스트의 첫번째 요소는'a [0]'이다. –

+0

@poorsod : $ Wow, 그리고 나는 0 색인 언어로 매일 프로그램하고 있습니다. 그것은 분명히 금요일의 끝입니다 ... 'globals()'에 대한 정보를 제공해 주셔서 감사합니다. – vossad01

+0

또한 파이썬에는'eval'과'exec'이있어서 원하는 모든 코드 비트를 동적으로 생성 할 수 있습니다. 비록 이것이 좋은 생각이라는 의미는 아닙니다. – Bakuriu

1

5 분 안에 실제로 코드를 작성할 수있을 때까지 처음부터이 작업을 수행하려는 이유를 생각하면서 적어도 5 분을 보냈습니다. 그 답례로 우리에게 왜 당신이 이것을하고 싶어하는지.

def new(value): 
    highest = -1 
    for name in globals(): 
     if name.startswith('a'): 
      try: 
       number = int(name[1:]) 
      except: 
       continue 

      if number > highest: 
       highest = number 


    globals()['a%d' % (highest + 1,)] = value 


new("zero") 
new("one") 
new("two") 

print a2 # prints two 
+0

나는 아래의 poorsod에 말했듯이, "기본적으로 프로그램은 다항식을 추가 할 것입니다. 변수 (또는 지금리스트)는 다른 단항 기호를 분리하는 것입니다. 그리고 다항식에 얼마나 많은 단항 기호가 있을지 모르기 때문에, 번호를 융통성있게 만드는 방법 " – Nick

+0

하지만 그 중 하나라도 작동하는지 확인해 보겠습니다. – Nick

+0

왜 글로벌 네임 스페이스에서 변수를 사용하라고 주장하는지 설명하지 않습니다. 모두 여기 좋은 이유 때문에 목록을 사용하라고 말하고 있으며 목록을 사용할 수 없다고 생각하는 것 같습니다. 어떤 경우에도 내 코드를 사용해 보셨습니까? 그것은 당신이 요구 한 것과 정확히 일치합니다. –