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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

5790閲覧

月日がゾロ目ならYesそうでなければNo

Bafetto

総合スコア22

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/12/20 12:55

m月d日がゾロ目ならYesそうでなければNoのコードを書きたい。
例) 11 1 をインプットしたらYes
2 4 をインプットしたらNo

以下のようなコードを考えました。
1/1 , 11/11 , 11/1 , 1/11の4タイプが想定される。
下のコードは11/11のみ正常に動く。

hizuke = input().split()
mlst = list(hizuke[0])
dlst = list(hizuke[1])
m1lst = list(hizuke[0][0])
m2lst = list(hizuke[0][1])
d1lst = list(hizuke[1][0])
d2lst = list(hizuke[1][1])

if m2lst == d2lst or mlst == dlst or mlst== m2lst or m2lst == dlst:
print("Yes")
else:
print("No")

(以下はコードと[結果])12月34日を想定
print(hizuke) ['12', '34']
print(mlst)  ['1', '2'] →月のつもり
print(dlst)  ['3', '4'] →日のつもり
print(m1lst)  ['1'] →月の10位のつもり
print(m2lst)  ['2'] →月の1位のつもり
print(d1lst)  ['3'] →日の10位のつもり
print(d2lst)  ['4'] →日の1位のつもり

よくでるエラー
Traceback (most recent call last):
File "Main.py", line 8, in <module>
m2lst = list(hizuke[0][1])
IndexError: string index out of range

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

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

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

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

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

guest

回答2

0

ベストアンサー

もっとシンプルに考えられそうです。

Python

1def main(): 2 src = input().replace(' ', '') 3 if len(set(src)) == 1: 4 print('Yes') 5 else: 6 print('No') 7 8main()

よくでるエラー

Python

Traceback (most recent call last):
...
IndexError: string index out of range

月あるいは日が一桁であるときに、
存在しない二桁目にアクセスしようとすると当然エラーが吐かれます。

コードの書き方について

teratailには、コードを見やすく表示する機能があります。
質問編集画面を開き、コードを選択した状態で<code>ボタンを押してください。
Python
特にPythonの場合、インデントが崩れるとコードの意味が変わってしまいます。

投稿2018/12/20 13:05

LouiS0616

総合スコア35660

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

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

hayataka2049

2018/12/20 13:35

その発想を推し進めるとこれでもいけますかね if len(set(input())) == 2: print("Yes") else: print("No")
LouiS0616

2018/12/20 13:37

個人的には『数字の種類が単一』という条件が見えづらくなるようにも思えます。
退会済みユーザー

退会済みユーザー

2018/12/20 14:00

11月11日と入力されたら3になるので数字以外は消しましょう
LouiS0616

2018/12/20 14:25 編集

要件が発散するので大目に見てくださいな。 November 11th とかいう入力も受け付けるとなると骨です。
can110

2018/12/20 14:11

問題が発散していきそう 全角、漢数字、和名、干支、エトセトラエトセトラ…
退会済みユーザー

退会済みユーザー

2018/12/20 14:14

廿弐月廿弐日とかか
Bafetto

2018/12/20 15:08

説明のコードを見て思ったこと。私は馬鹿なのかなぁ。どうやったら、このようなコードが書けるのだろうか? src = input().replace(' ', '') 入力された値にあるスペースを削除してsrcに入れる。 if len(set(src)) == 1: srcの値で重複する値を削除して、要素数を数える。 1 11 なら1で==1になる。 12 1 なら12で!=1になる。 もし可能なら、頭の動きとコードをリンクして説明して頂けたらうれしい。 まず問題文を読んで、何を考えるいるのでしょうか? いきなりコードを思いつくのでしょうか? それともフローチャートが思いつくのでしょうか? それとも過去に書いたコードが使えるかもとか思うのでしょうか? 思考に順番とかあるのでしょうか?空雨傘のような
LouiS0616

2018/12/20 15:22 編集

・問題を読む ↓一種類かどうか判定すればいいのか ↓とりあえず種類のカウントには集合が使えそうだなぁ ↓使いやすいように入力を前処理すればいいや 完成 小規模なコードを書くのに必要なのは、やはり慣れですね。 また、他の人が書いたコードを読むことで着想の幅は広がっていきます。良い方法を知っているのも大事ですが、敢えて良くない方法を観察することも大切です。 とにかく多くのコードに触れて、真似してみることです。
anddy

2018/12/21 14:17

a = input().replace(" ","") if a.count(a[0]) == len(a): print("Yes") else: print("No") とすればもっとシンプルでは?
LouiS0616

2018/12/21 14:33

@anddy さん コメントありがとうございます。 私は『一文字目が文字長分だけある』より『文字の種類が単一である』の方が述語としてしっくり来るのですが、人に依って違うのかもしれませんね。 また、空文字列を渡されたときに例外を吐くのが少し気掛かりです。 ともあれ多くのアイデアがあるのは良いことです。 私と違う視点のコード、非常に参考になりました。
guest

0

dateutil である程度自由に日付けを入力できるようにしてみました。
(pip install py-dateutil でインストールできる)

d.py

python3

1from dateutil.parser import parse 2 3def check(dt): 4 s = str(dt.month) +str(dt.day) 5 return len(set(s)) == 1 6 7while True: 8 s = input("日付けを指定してください (空文字入力で終了):") 9 if len(s) == 0: 10 break 11 try: 12 dt = parse(s) 13 print(dt, "->", check(dt)) 14 except: 15 print('Error')

実行例
イメージ説明

投稿2018/12/20 15:28

katoy

総合スコア22324

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問