質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Discord

Discordは、ゲーマー向けのボイスチャットアプリです。チャット・通話がブラウザ上で利用可能で、個人専用サーバーも開設できます。通話中でも音楽を流したり、PC画面を共有できるなど多機能な点が特徴です。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

意見交換

クローズ

1回答

990閲覧

discord botで、通話に参加している人を任意のチーム数に振り分ける方法

mashingan0302

総合スコア0

Discord

Discordは、ゲーマー向けのボイスチャットアプリです。チャット・通話がブラウザ上で利用可能で、個人専用サーバーも開設できます。通話中でも音楽を流したり、PC画面を共有できるなど多機能な点が特徴です。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2023/06/23 09:02

編集2023/06/23 09:04

0

0

テーマ、知りたいこと

discord.pyを使用してdiscordのチーム分けbotを作成したいのですが、「IndexError:list index out of range」とエラーが出て上手くいきません。どこを改良したらいいでしょうか?

想定していた流れ

通話に参加しているユーザーを取得して、リスト(teamL)に格納

作成したいチーム数(X_int)と同じ数のからのリストが入った多重リスト(team)を作成

teamLの末尾からチームの人数分の要素をteam内の空のリストに順番に追加

追加したユーザーをteamLから削除

余ったユーザーをteam内のリストに1人ずつ順番に追加していく

実際に書いたコード (該当部分のみ)

python

1#入力した値を取得 2def check(m): 3 print(m.content) #デバック用 4 print(m.content == "2") #デバック用 5 return m.content == "2" #デバック用 6 7 msg = await client.wait_for("message", check=check) 8 print(msg.content) #デバック用 9 #受け取った文字列を数値に変換できるかの確認 10 try:  11 X = msg.content 12 print(X) #デバック用 13 print(int(X)) #デバック用 14 X_int = int(X) #分けたいチーム数 15 16 #できなかった場合 17 except : 18 await message.channel.send("最初からやり直してください") 19 20 #できた場合 21 else: 22 #1チームの人数(numT)とあまりの人数(numA)を算出 23 i = len(teamL) 24 numA = i % X_int 25 numT = (i - numA) // X_int 26 27 #多重リスト内の空のリストにチームの人数ずつ振り分けていく 28 #振り分けたユーザーは元のリストから削除する 29 Y = 0 30 team = [[] for i in range(X_int)] 31 while Y < X_int: 32 team[Y] = teamL[-numT] #エラーが出た個所 33 del teamL[-numT] 34 Y += 1 35 36 #余ったユーザーを多重リスト内のリストに1人ずつ振り分けて行く 37 Z = 0 38 while len(teamL) == 0: 39 team[Z].append = teamL[Z] 40 del teamL[Z] 41 Z += 1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

回答1

#1

toot_iba

総合スコア10

投稿2023/06/23 12:55

エラーは、リストに対して不適切なインデックスを与えられたため発生しています。
team = [0,1,2] というリストに対して、team[5]と呼び出した時に、同様のエラーとなります。
今回のコードでは、例えばteamL=[]のときには、teamL[0]という呼び出しで、このエラーになりそうです。

具体例は他に思いつきませんが、例えばwhile文の中でprint文を書き、デバッグ文を書けるとよいですね。
print(teamL, numT, team, Y) というように、関係する変数全て出すとわかりやすいかと思います。

エラーの原因としては上述で良く、それをとりあえずエラーがおこらないようにすることもできますが、
おそらくそれではこのコードの目的を達しないと思います。

27行目から41行目を次のように書いてはどうでしょうか。

python

1team = [[] for i in range(X_int)] 2for i in range(len(teamL)): 3 team[i%X_int].append(teamL[i])

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

最新の回答から1ヶ月経過したため この意見交換はクローズされました

意見をやりとりしたい話題がある場合は質問してみましょう!

質問する

関連した質問