0

私はこのコードを持っています:

n = int (input ('Enter the Number of Players: '))
m = [[j] for j in range (0, n)]
all_names= []
i = 0
while n > 1:
    m[i] = input('Player {0}: '.format (i+1))
    all_names.extend ([m[i]])
    if m[i][0] != m[i-1][-1]:
        b= m.pop (i)
        n = n-1
    if all_names.count (m[i]) == 2:
        n = n-1
        b= m.pop (i)
    i = i+1

インデックスが範囲外です (2 番目の if 句) と表示されますが、わかりません。なぜですか?

4

2 に答える 2

0

あなたの質問に直接答えたくないのですが、あなたがやろうとしていることは... 本当に混乱しているようです. Python には、物事を行うには非常に明確でクリーンな方法が必要であるという一種のルールがあるため、コードの一部が本当にファンキーに見える場合 (特にそのような単純な関数の場合)、それはおそらく正しいアプローチを使用していません。

名前のコンテナを作成したいだけなら、もっと簡単な方法がたくさんあります:

players=int(input("How many players?\n"))
player_names=set()
while len(player_names)<players:
  player_names.add(input("What is player {}'s name?\n".format(len(player_names)+1)))

... 一意のプレーヤー名のセットが提供されますが、これは順序付けされません。それは問題になるかもしれません (あなたの実装は順序を保っていたので、そうかもしれません)。この場合でも、リストを使用して小さなチェックを追加して、新しい名前を追加していることを確認し、名前を繰り返し追加していないことを確認できます。

players=int(input("How many players?\n"))
player_names=list()
while len(player_names)<players:
  playname=input("What is player {}'s name?\n".format(len(player_names)+1))
  if playname not in player_names:
    player_names.append(playname)

特に質問者がとったアプローチに目的/理由がある場合は、質問をかわすことについて誰かが私に口論することにオープンです。

于 2013-08-18T20:26:22.053 に答える