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

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

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

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

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

Q&A

0回答

383閲覧

数独で、フォーム入力を効率的に書きたい with Django

noyan

総合スコア7

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

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

0グッド

0クリップ

投稿2020/10/12 06:58

数独ソルバーを作ったので、あわせてDjangoでCRUDを用いて数独を遊べるアプリケーションを作ってみたいのですが、各マスに数字を入れるという入力を、どうやって受け取るのが効率的かわかりません。

必要なことは、
・9*9のマス目の各セルに数値を入力し、それを描く
・縦横と枠内の相互関係をチェックする

方法として思いついたのは以下の三つです。
1.99個の変数を持った一つのフォームをつくる(変数名、処理が面倒)
2.クラスを用意して、99個の入力はそのクラスのインスタンスとして扱う(上下左右の参照が難しい)
3.9*9の二次元配列を用意して、個々の入力を代入していく(データベースといえるのか?)

たとえば、べた書きで9*9マスの入力フォームを作るのは冗長で、変数の扱いも面倒だと思います。
モデルとしてクラスを設定した場合には、楯列・横列・枠内の判定が難しそうです。

この場合、どのような方法をとるべきでしょうか?

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

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

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

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

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

sfdust

2020/10/12 13:40

> 3.9*9の二次元配列を用意して、個々の入力を代入していく(データベースといえるのか?) の「データベースといえるのか?」とはどういう意味ですか? 問題や回答そのものを、データベースのテーブルに格納するという前提でしょうか?
noyan

2020/10/12 16:17

質問ありがとうございます。 データベースへの理解があまり深くない実感はあるのですが、質問した時点ではレコードが一つだけのテーブルがSQL使用を前提としたデータベースの目的に沿うのか疑問がありました。 ただ、質問をうけて明確になりましたが、問題を複数もてば複数のレコードが存在しますね。 複数の問題を作る想定をしています。機能拡張として問題をユーザーが追加できるというのも考えています。 前提としては、データベースを使って数独を実装したいと考えています。問題の原本はクラスで保存し、回答をデータベースのテーブルに保存したいと思っています。問題をデータベースにおかないのは、リセットするともう一度同じ問題をとけるようにするためです(問題を__init__に書いて、リセットは__init__を呼び出すのとどちらがいいでしょうか?)。 質問の回答になっているでしょうか? なにかベストプラクティスがあればそれに従いますし、そうでなければ、「CRUDつくれた」という部分があればよいので、データベースとして意義の薄い実装でもよいと思っています。
sfdust

2020/10/13 00:14 編集

元質問の各マスに入力~とは離れていますが、直近のご質問については下記のような形になるのかなと思いました。 (要求定義)=利用者にどんなサービスを提供したいのか?使用したとしたどんな感じ? + 複数ユーザーが利用するサービスである(=回答はユーザーごとに異なる) + 回答はユーザーごとに途中で保存し、再開できるようにしたい。 + 問題は複数作っておき使いまわしたい。 ということのようですので ↓ (ここから得られる設計方針) + 問題も、回答も、データベースに格納して保存できるようにする。 -ユーザーテーブルを作る -問題テーブルを作っておき、複数の、問題の原本データをテーブル内に格納しておく。 -回答は、ユーザーIDと問題IDを外部キーにして、ユーザーと問題ごとに回答テーブルに格納する。「回答済み」「回答中」か、を示すカラムも必要。 まずはデータベースの基本設計はこのような形になるかなと思いました。 あと、「回答や問題をデータベースに格納すること」と、「リセットに代表されるような、プログラム中での回答データ・問題データの扱い方」とは別だと思います。 問題をデータベースに置かなければ、ユーザーが選択した問題を、アプリケーション全体でユーザーと紐つけて管理するのが難しい気もします。 また「リセット」とはおそらく「今まで書いた回答を途中で白紙にすること」でしょうか? 個人的には、その「リセット」なる実装は、回答中のデータをプログラム中でどう保持するか、ユーザーの入力動作をどう回答データに流し込むか、等によって変わってくると思うため、__init__()内にその機能を書いてこれを呼び出すべきかどうか、といった議論について、ここでは明確に回答できません。 個人的には、直接__init__()関数を呼び出すことはしません。 (これ以上につきましては、誠に申し訳ございませんが小職の知識不足もあり回答いたしかねますので、他の方に譲ります)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問