1

私はこのコードブロックを取得して、星からの距離に基づいて惑星の種類を決定しようとしていますが、情報を出力するのはテラフォーム惑星だけです。

3 番目の if ステートメントの前に惑星の種類を出力すると、選択したすべての惑星の種類が出力されますが、続くように見える唯一の if ステートメントは、「planet_type が "terraform" の場合」です。

for distance in (a):
    while True:
        random_x = random.randint(-distance,distance)
        random_y = random.randint(-distance,distance)

        if(random_x <distance and random_x >-distance and random_y <distance and random_y >-distance):
            continue
        else:
            print "Creating planets"
            time.sleep(.5)
            print distance

       if star_size*100 >= distance:
           possible_planet_type = ('mineral' , 'gas', 'organic', 'terraform', 'ice')
           planet_type = random.choice(possible_planet_type)
       if planet_type is "mineral":
           planet_diameter = random.randint(3000,8000)
           iron = planet_diameter*random.randint(10,100)    
           carbon = planet_diameter*random.randint(5,50)
           oxygen = planet_diameter*random.randint(0,0)
           h2o = planet_diameter*random.randint(0,1)
           deuterium = planet_diameter*random.randint(0,5)
           helium_3 = planet_diameter*random.randint(0,2)
           print planet_type, planet_diameter, iron, carbon, oxygen, h2o, deuterium, helium_3
           # name = a[distance]

        elif planet_type is "organic":
            planet_diameter = random.randint(8000,10000)
            iron = planet_diameter*random.randint(10,20)
            carbon = planet_diameter*random.randint(5,10)
            oxygen = planet_diameter*random.randint(40,100)
            h2o = planet_diameter*random.randint(30,100)
            deuterium = planet_diameter*random.randint(0,3)
            helium_3 = planet_diameter*random.randint(0,2)
            print planet_type, planet_diameter, iron, carbon, oxygen, h2o, deuterium, helium_3
            # name = a[distance]

        elif planet_type is "terraform":
            planet_diameter = random.randint(8000,10000)
            iron = planet_diameter*random.randint(10,20)
            carbon = planet_diameter*random.randint(5,10)
            oxygen = planet_diameter*random.randint(40,100)
            h2o = planet_diameter*random.randint(30,100)
            deuterium = planet_diameter*random.randint(0,3)
            helium_3 = planet_diameter*random.randint(0,2)
            print planet_type, planet_diameter, iron, carbon, oxygen, h2o, deuterium, helium_3
            # name = a[distance]

        elif planet_type is "gas":
            planet_diameter = random.randint(20000,90000)
            iron = planet_diameter*random.randint(10,20)
            carbon = planet_diameter*random.randint(5,10)
            oxygen = planet_diameter*random.randint(40,100)
            h2o = planet_diameter*random.randint(30,100)
            deuterium = planet_diameter*random.randint(0,0)
            helium_3 = planet_diameter*random.randint(0,2)
            print planet_type, planet_diameter, iron, carbon, oxygen, h2o, deuterium, helium_3
            # name = a[distance]

       elif planet_type is "ice":
            planet_diameter = random.randint(2000,6000)
            iron = planet_diameter*random.randint(10,20)
            carbon = planet_diameter*random.randint(5,10)
            oxygen = planet_diameter*random.randint(40,100)
            h2o = planet_diameter*random.randint(30,100)
            deuterium = planet_diameter*random.randint(0,1)
            helium_3 = planet_diameter*random.randint(0,1)
            print planet_type, planet_diameter, iron, carbon, oxygen, h2o, deuterium, helium_3
            # name = a[distance]

次の出力が得られます。

Creating planets
6199
terraform 8578 162982 77202 737708 660506 17156 17156
Creating planets
4664
Creating planets
9844
Creating planets
4410
terraform 8280 99360 41400 819720 571320 0 0
Creating planets
7483
Creating planets
7882
Creating planets
2111
Creating planets
978
Creating planets
1857
terraform 9446 122798 94460 765126 425070 9446 9446
Creating planets
9155
Creating planets
1093
Creating planets
8646
Creating planets
5313
4

1 に答える 1

6

すべてis==に変更します。例:

if planet_type == "mineral":

を使用するとうまくいく場合もありis ますが、文字列を比較する正しい方法は を使用すること==です。

背景を説明するために、オブジェクトの内容ではなく、isオブジェクトの同一性を比較します。同じテキストを含む 2 つの文字列リテラルは、同じ ID を持つ場合と異なる場合があります。

于 2012-11-28T18:42:25.003 に答える