🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python

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

Q&A

解決済

5回答

1071閲覧

その日の日付を平仮名で入力して正誤判定するプログラムを作りたい

W.B

総合スコア9

Python

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

1グッド

2クリップ

投稿2021/01/31 04:35

前提・実現したいこと

外国人に日本語を教えている者です。
外国人の学生に日付を覚えてもらうために、その日の日付を平仮名で入力して正誤を問うプログラムを作りたい思っているんですが、どんなコードを書いたらいいでしょうか?
datetimeモジュールを使って、その日の日付を取得し、それを平仮名に変換して、if関数などでできないかと考えているんですが。

よろしくお願いします。

68user👍を押しています

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

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

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

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

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

W.B

2021/02/01 13:03

返信ありがとうございます。 回答してくださったのを参考にして、ちょっと時間がかかるかもしれませんが、頑張って作ってみます。
W.B

2021/02/03 09:14

変なコードになってしまい、すみません。 ~月~日は難しいと思い、日にちだけにしようと思いましたが、難しいです。 何かいいアドバイスがありましたら、よろしくお願いいたします。 import datetime now = datetime.datetime.now() hiragana = now.strftime('%d') hdict = {1 : ['ついたち'], 2 : ['ふつか'], 3 : ['みっか'], 4 : ['よっか'], 5 : ['いつか'], 6 : ['むいか'], 7 : ['なのか'], 8 : ['ようか'], 9 : ['ここのか'], 10 :[ 'とおか'], 11 : ['じゅういちにち'], 12 : ['じゅうににち'], 13 : ['じゅうさんにち'], 14 : ['じゅうよっか'], 15 : ['じゅうごにち'], 16 : ['じゅうろくにち'], 17 : ['じゅうしちにち', 'じゅうななにち'], 18 : ['じゅうはちにち'], 19 : ['じゅうくにち'], 20 : ['はつか'], 21 : ['にじゅうういちにち'], 22 : ['にじゅうににち'], 23 : ['にじゅうさんにち'], 24 : ['にじゅうよっか'], 25 : ['にじゅうごにち'], 26 : ['にじゅうろくにち'], 27 : ['にじゅうしちにち', 'にじゅうななにち'], 28 : ['にじゅうはちにち'], 29 : ['にじゅうくにち'], 30 : ['さんじゅうにち'], 31 : ['さんじゅういちにち'] } def check_hiragana(date,hiragana): return hiragana in hdict[date] today = input('今日は何日ですか: ') if today == hiragana: print('正解') else: print('違います')
guest

回答5

0

ベストアンサー

Python

1import datetime 2 3now = datetime.datetime.now() 4day = int(now.strftime('%d')) 5hdict = { 6 1 : ['ついたち'], 2 : ['ふつか'], 3 : ['みっか'], 4 : ['よっか'], 7 5 : ['いつか'], 6 : ['むいか'], 7 : ['なのか'], 8 : ['ようか'], 8 9 : ['ここのか'], 10 :[ 'とおか'], 11 : ['じゅういちにち'], 9 12 : ['じゅうににち'], 13 : ['じゅうさんにち'], 14 : ['じゅうよっか'], 10 15 : ['じゅうごにち'], 16 : ['じゅうろくにち'], 11 17 : ['じゅうしちにち', 'じゅうななにち'], 12 18 : ['じゅうはちにち'], 19 : ['じゅうくにち'], 20 : ['はつか'], 13 21 : ['にじゅうういちにち'], 22 : ['にじゅうににち'], 23 : ['にじゅうさんにち'], 14 24 : ['にじゅうよっか'], 25 : ['にじゅうごにち'], 26 : ['にじゅうろくにち'], 15 27 : ['にじゅうしちにち', 'にじゅうななにち'], 28 : ['にじゅうはちにち'], 16 29 : ['にじゅうくにち'], 30 : ['さんじゅうにち'], 31 : ['さんじゅういちにち'] 17} 18today = input('今日は何日ですか: ') 19if today in hdict[day]: 20 print('正解') 21else: 22 print('違います')

実行結果

text

1今日は何日ですか: よっか 2正解

投稿2021/02/03 17:03

kazuma-s

総合スコア8224

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

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

W.B

2021/02/04 02:55

ありがとうございます。 投稿してよかったと思います。 同じ要領で月も作って、二つを組み合わせて「今日は何月何日ですか」と尋ねるプログラムを作りたいと思います。
guest

0

17日をどう読む?のような問題もあるので、複数のひらがなを正解とできるようにしたほうが良いかと思います。

python

1hdict = {1 : ['ついたち'], 2 : ['ふつか'], 3 : ['みっか'], 4 : ['よっか'], 2 5 : ['いつか'], 6 : ['むいか'], 3 7 : ['なのか', 'なぬか', 'ひちにち', 'しちにち'], 8 : ['ようか'], 4 9 : ['ここのか'], 10 :[ 'とうか'], 5 11 : ['じゅういちにち'], 12 : ['じゅうににち'], 13 : ['じゅうさんにち'], 6 14 : ['じゅうよんにち', 'じゅうよにち'], 15 : ['じゅうごにち'], 7 16 : ['じゅうろくにち'], 8 17 : ['じゅうひちにち', 'じゅうしちにち', 'じゅうななにち'], 9 18 : ['じゅうはちにち'], 19 : ['じゅうくにち', 'じゅうきゅうにち'], 10 20 : ['はつか'], 21 : ['にじゅうういちにち'], 22 : ['にじゅうににち'], 11 23 : ['にじゅうさんにち'], 24 : ['にじゅうよんにち', 'にじゅうよにち'], 12 25 : ['にじゅうごにち'], 26 : ['にじゅうろくにち'], 13 27 : ['にじゅうひちにち', 'にじゅうしちにち', 'にじゅうななにち'], 14 28 : ['にじゅうはちにち'], 29 : ['にじゅうくにち', 'にじゅうきゅうにち'], 15 30 : ['さんじゅうにち'], 31 : ['さんじゅういちにち'] 16} 17 18def check_hiragana(date, hiragana): 19 return hiragana in hdict[date]

実行結果は以下です。

python

1>>> check_hiragana(17, 'じゅうひちにち') 2True 3>>> check_hiragana(17, 'じゅうななにち') 4True 5>>> check_hiragana(17, 'じゆうしちにち') 6False

投稿2021/01/31 23:12

ppaul

総合スコア24670

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

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

W.B

2021/01/31 23:32

ありがとうございます。 是非参考にしたい思います。 初心者でわからないことが多いのですが、調べながら頑張って作ってみたいと思います。
guest

0

下記のような配列を作っておいて、
day=3 なら days[3] を取得し、split でコロンで区切って、
判定なり表示なりする、とかがいいんじゃないでしょうか。

days = [ '0日用ダミー', 'ついたち:一日', 'ふつか:二日', 'みっか:三日', ]

月も曜日も同様です。

投稿2021/01/31 06:35

68user

総合スコア2022

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

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

W.B

2021/01/31 06:39

ありがとうございます。
guest

0

datetimeモジュールを使って、その日の日付を取得し、それを平仮名に変換して、if関数などでできないかと考えているんですが。

数値の日付(「1日」など)を、kanjizeモジュールで漢数字の日付(「一日」など)に変換し、KAKASI(pykakasiモジュール)を使ってひらがなに自動変換するプログラムを作ってみました。

Python

1from pykakasi import kakasi 2import kanjize 3 4kakasi = kakasi() 5kakasi.setMode('J', 'H') 6conv = kakasi.getConverter() 7 8for i in range(1, 32): 9 text = f"{kanjize.int2kanji(i)}日" 10 print(f"{text}: {conv.do(text)}")

結果は以下のようになります。「十日」(とおか)、「十九日」(じゅうくにち)、「二十一日」~「二十九日」、「三十一日」の読みを見ると、このアプローチは使えません。

result

1一日: ついたち 2二日: ふつか 3三日: みっか 4四日: よっか 5五日: いつか 6六日: むいか 7七日: なのか 8八日: ようか 9九日: ここのか 10十日: とうか 11十一日: じゅういちにち 12十二日: じゅうににち 13十三日: じゅうさんにち 14十四日: じゅうよんにち 15十五日: じゅうごにち 16十六日: じゅうろくにち 17十七日: じゅうしちにち 18十八日: じゅうはちにち 19十九日: じゅうきゅうにち 20二十日: はつか 21二十一日: にじゅうついたち 22二十二日: にじゅうふつか 23二十三日: にじゅうみっか 24二十四日: にじゅうしにち 25二十五日: にじゅういつか 26二十六日: にじゅうむいか 27二十七日: にじゅうなのか 28二十八日: にじゅうようか 29二十九日: にじゅうここのか 30三十日: さんじゅうにち 31三十一日: さんじゅうついたち

結局、各日の日付の読み(複数も考慮)は、あらかじめリストか辞書に列挙しておくことになるでしょう。

投稿2021/01/31 05:52

編集2021/01/31 06:01
Daregada

総合スコア11990

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

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

W.B

2021/01/31 06:38

ありがとうございます。 真似をして作ってみます。
guest

0

変なコードになってしまい、すみません。
なかなかうまくいかず行き詰っています。
もしアドバイスをいただけるなら、よろしくお願いします。

import datetime
now = datetime.datetime.now()
hiragana = now.strftime('%d')

hdict = {1 : ['ついたち'], 2 : ['ふつか'], 3 : ['みっか'], 4 : ['よっか'],
5 : ['いつか'], 6 : ['むいか'],
7 : ['なのか'], 8 : ['ようか'],
9 : ['ここのか'], 10 :[ 'とおか'],
11 : ['じゅういちにち'], 12 : ['じゅうににち'], 13 : ['じゅうさんにち'],
14 : ['じゅうよっか'], 15 : ['じゅうごにち'],
16 : ['じゅうろくにち'],
17 : ['じゅうしちにち', 'じゅうななにち'],
18 : ['じゅうはちにち'], 19 : ['じゅうくにち'],
20 : ['はつか'], 21 : ['にじゅうういちにち'], 22 : ['にじゅうににち'],
23 : ['にじゅうさんにち'], 24 : ['にじゅうよっか'],
25 : ['にじゅうごにち'], 26 : ['にじゅうろくにち'],
27 : ['にじゅうしちにち', 'にじゅうななにち'],
28 : ['にじゅうはちにち'], 29 : ['にじゅうくにち'],
30 : ['さんじゅうにち'], 31 : ['さんじゅういちにち']
}
def check_hiragana(date,hiragana):
return hiragana in hdict[date]

today = input('今日は何日ですか: ')

if today == hiragana:
print('正解')
else:
print('違います')

投稿2021/02/03 09:11

W.B

総合スコア9

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問