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

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

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

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

Q&A

3回答

710閲覧

Function バグが見つけられない

dokugakusets

総合スコア10

Python 3.x

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

0グッド

0クリップ

投稿2021/04/28 05:20

編集2021/05/01 05:38

文章内の母音と子音を分けて各総数を出す式を作ってみたのですが、文章によっては正しく答えが出せないのですが、バグが見つけられません。

python3

1コード 2def kazoeru(bunsho, shiin): 3 countC=0 4 countV=0 5 alphabet_list=("abcdefghijklmnopqrstuvwxyz") 6 for i in bunsho: 7 if i in alphabet_list: 8 my_list =["a", "e", "i", "o", "u"] 9 if i not in my_list: 10 shiin=True 11 countC+=1 12 13 else: 14 shiin=False 15 countV+=1 16 if shiin==True: 17 return(countC) 18 else: 19 return(countV) 20 21 22bunsho=("but thy eternal summer shall not fade") 23print(kazoeru(bunsho, True)) 24print(kazoeru(bunsho, False)) 25

よろしくお願いします。

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

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

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

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

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

TakaiY

2021/04/28 05:28

これではソースがまったくよめないので、「```python3」の直後と、最後の「```」の直前に改行を入れてください。 また、ソースコード内の改行も消えているので、貼り直してください。
dokugakusets

2021/04/28 06:04

申し訳ありません!入力操作がよくわからず間違った入力方法してしまいました。
TakaiY

2021/04/28 06:06

モウイッポですね。 先頭の方にたぶん「```」 だけの行がありますので、その行を消してください。 あと、同じ関数などが2回 現れますが、これはどういう意味でしょう?
TakaiY

2021/04/28 06:08

また、うまくいく例といかない例を、それぞれの結果と予想している結果をあわせて、出すことはできますか。
jbpb0

2021/04/28 09:37

> 先頭の方にたぶん「```」 だけの行がありますので、その行を消してください。 そうならば、「python3」だけ長方形の中に入るはずなので、「```」 だけの行がどこにも無い、のではないかな?? 質問者さん 質問のpythonのコードの一番最後の行のすぐ下に ``` だけの行を追加してみてください
dokugakusets

2021/04/28 10:43

```を最初の方のは消して、最後のところに入れてみました。これで合ってますでしょうか? 同じ関数が2回なのは、本当は一つにしたいのですが、上手くできなかったので分けてみました。一つにまとめる方法も教えていただければ助かります。 バグと思われるのは、Falseの時は正解が出るのに、Trueの時には間違った答えが出てしまいます。 よろしくお願いします。
can110

2021/04/28 11:32

すでにTakaiYさんも指摘されていますが、間違う場合の具体的な入力例と 現在の(間違った)結果と予想している(正しい)結果を明示ください。
TakaiY

2021/04/28 13:19

どちら関数も正しい答が出ているようにみえますけどね。 片方は子音で片方は母音(分類はちょっとちがうけど)の数になってます。 また、関数内のshiinn変数も何もしてませんが。
otn

2021/04/29 02:05

そもそも、printのところの括弧の数が合ってないので、文法エラーです。 実行しているプログラムと質問文のプログラムが異なると言うことでしょう。 実行して結果が出ているプログラムをそのままコピペしましょう。
dokugakusets

2021/04/29 05:54

ご指摘いただきまして、ありがとうございます。コピペしました。 また、求めている結果は、21と10です。しかし24と10になってしまいます。 また、できれば、これを一つの関数でまとめたいのですが、色々試してもうまくいきません。その方法も併せてよろしくお願いします。
otn

2021/04/29 06:17

"lundberg backdrop us phd formate polemic" の子音は24個なので合ってますね。21というのは何の数字??
jbpb0

2021/04/29 07:17

質問者さん 一つ目の「def kazoeru(...」の関数定義のすぐ下の bunsho=("lundberg backdrop us phd formate polemic") を bunsho=("but thy eternal summer shall not fade") に変えたら、「but thy eternal summer shall not fade」内の子音数は21なので、 > 求めている結果は、21と10 になりますよ
jbpb0

2021/04/29 07:24

> 文章内の母音と子音を分けて各総数を出す は、下記のどちらの意味でしょうか? ・母音数と子音数を常に両方数えて、両方の結果を返す関数にしたい ・関数の引数「shiin」の「True/False」の指定で、子音数を数えるか母音数を数えるかを切り替えられる関数にしたい (一度に数えるのは子音数か母音数かどちらかだけ)
dokugakusets

2021/04/30 07:12 編集

説明が不十分で申し訳ありません!母音数と子音数を常に両方数えて、両方の結果を返す関数にしたいです。 よろしくお願いします。すみません!プログラムそのものが考えていたものとずれていました。。。 「if shiin=True:ならreturn(countC)」という形にしたいです。Trueなら子音の総数。Falseなら母音の総数を返したいです。 うまく説明できなくて混乱させてしまって、申し訳ありません!
guest

回答3

0

shiinという変数が何だったのかを途中で忘れてしまっているようですね。

最小限の変更で書くと、

Python

1def kazoeru(bunsho, shiin): 2 countC=0 3 countV=0 4 alphabet_list=("abcdefghijklmnopqrstuvwxyz") 5 for i in bunsho: 6 if i in alphabet_list: 7 my_list =["a", "e", "i", "o", "u"] 8 if i not in my_list: 9 countC+=1 10 else: 11 countV+=1 12 if shiin==True: 13 return(countC) 14 else: 15 return(countV) 16 17 18bunsho=("but thy eternal summer shall not fade") 19print(kazoeru(bunsho, True)) 20print(kazoeru(bunsho, False))

もうちょっと書き直すと、

Python

1def kazoeru(bunsho, shiin): 2 count=0 3 alphabet="abcdefghijklmnopqrstuvwxyz" 4 boin="aeiou" 5 for i in bunsho: 6 if i in alphabet: 7 if (i not in boin) == shiin: 8 count+=1 9 return count 10 11 12bunsho=("but thy eternal summer shall not fade") 13print(kazoeru(bunsho, True)) 14print(kazoeru(bunsho, False))

投稿2021/05/01 05:55

otn

総合スコア85901

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

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

dokugakusets

2021/05/01 07:16

回答をありがとうございます!やってみたのですが、どちらも子音の総数が出てしまって、母音の総数が出ません。 countVは10になるのに、 kazoeru(bunsho, False)だと21になってしまうようです。すみません。今一度お教えいただければ幸いです。
otn

2021/05/01 08:13

回答のコードを実行して、 21 10 と表示されないとすると、コピペに失敗しています。 注意深くやり直しましょう。
guest

0

Python

1def 関数(文字列, 母音を数える): 2 3 # 母音数と子音数はどちらも0 4 5 # 文字列の先頭から1文字ずつ走査する 6 # もし 文字 が 母音 に含まれる なら 7 # 母音数 をひとつ増やす 8 # それとも 文字 が アルファベット に含まれる なら 9 # 子音数 をひとつ増やす 10 11 #もし 母音を数える なら 12 # 母音数 を返す 13 # 子音数 を返す

投稿2021/04/30 09:00

can110

総合スコア38341

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

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

dokugakusets

2021/05/01 05:40

ありがとうございます。can110様の回答を元に自分なりに考えて作ってみたのですが、答えが正しく出せませんでした。どこが間違っているのかご指摘いただければ助かります。 よろしくお願いします。
guest

0

推測ですが、Pythonの関数についての誤解があるのではないでしょうか。

Pythonでは、同じ名前の関数を複数定義すると、最後に定義された関数だけが有効です。
引数の型や値によって、同じ名前の複数の関数のうちで適当なものが動作するというような言語ではありません。

投稿2021/04/28 15:57

ppaul

総合スコア24670

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

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

dokugakusets

2021/04/29 05:57

関数というのは同じだと、最後のだけが、有効なのですね。それでTrueの方の答えが合わないのですね。ありがとうございます。この二つの内容(子音と母音の数を各々出す)を一つの関数内に収めるにはどうすればよいでしょうか? よろしくお願いします。
jbpb0

2021/04/29 07:10 編集

bunsho=("lundberg backdrop us phd formate polemic") print(kazoeru(bunsho, True)) の時点では、それよりも上に定義されてる一つ目の「def kazoeru(...」のみ有効なので、その関数が実行されます 「if i not in my_list:」により子音を数えるので、「lundberg backdrop us phd formate polemic」内の子音数の24が関数の実行結果になります bunsho=("but thy eternal summer shall not fade") print(kazoeru(bunsho, False)) の時点では、二つ目の「def kazoeru(...」で関数定義が上書きされた後なので、その関数が実行されます 「if j in my_list:」により母音を数えるので、「but thy eternal summer shall not fade」内の母音数の10が関数の実行結果になります
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問