1

基本的に、プログラムで複数の (無制限の) 変数を作成できるようにする必要があります。変数を定義しなくても、コードを介して操作できるようにする必要があります。

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

最終的にこれをループにします。

より理解しやすいように、コードにコメントを追加しました。

4

2 に答える 2

6

基本的に、変数が存在するヒープスペースをプログラムで動的に変更しようとしています。これが可能だとは本当に思いません。もしそうなら、それは非常にあいまいです。

私はあなたがどこから来たのか理解しています。私が最初にプログラミングを学んだとき、そのような「動的に作成された」変数を必要とする方法で問題を解決しようと考えていました。解決策は、どのような (コレクション) データ構造がニーズに合っているかを認識することです。

a1を通じて変数が必要な場合はa30、リストを作成しますa。それなら、なるa1だろう。書き方は少し異なりますが、必要な動作が得られるはずです。a[1]a30a[30]

于 2012-10-12T21:25:59.047 に答える
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
于 2012-10-12T21:44:29.243 に答える