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

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

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

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

Q&A

解決済

1回答

621閲覧

塾の課題でパイソン3の課題を出されたのですが、分かりません。「関数と内包表記、while文」

flatfalcon

総合スコア2

Python

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

0グッド

0クリップ

投稿2020/11/19 06:10

前提・実現したいこと

塾の課題で以下のような問題が出題されました。

「問題文」
内包表記とrangeを用いて、1から30までのリストnumを作成しなさい。内包表記で、リストnumの中から偶数を取り除き、かつ、10以下の奇数のみで構成されるリストkisuuを作成しなさい。
その後に、空のリストguusuuを作成しなさい。
その後に関数tuikaを宣言しなさい。引数をaとして、変数abcを宣言し、kisuu[a]に1を足して、奇数を偶数にし、returnでabcを返す。
その後、a=0を宣言し、while文でaが7よりも小さい間、guusuuのリストに関数tuikaから返ってきたものを入れていく。しかし、aが5になったらbreakで処理をやめる。
最後にリストkisuuとguusuuを表示しなさい。

発生している問題・エラーメッセージ

kisuuはちゃんと表示されているのに対して
guusuuは空のままである。

実行結果
[1,3,5,7,9]
[]

該当のソースコード

パイソン3

num=[x for x in range(1,31)] kisuu=[y for y in num if ((y<=10)and(y%2==1))] guusuu=[] def tuika(a): abc=kisuu[a]+1 return abc a=0 while a<7: guusuu = tuika() if a==5: break print(kisuu) print(guusuu)

試したこと

問題文の順序に沿って書いてみたのですが、何故かguusuuのリストだけずっと空のままです。
何がいけないのでしょうか?

補足情報(FW/ツールのバージョンなど)

paiza

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

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

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

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

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

ozwk

2020/11/19 06:19

問題文がの指示が一部曖昧ですが本当に問題文そのままですか?
sfdust

2020/11/19 06:27 編集

問題文の「その後、a=0を宣言し、while文でaが7よりも小さい間、guusuuのリストに関数tuikaから返ってきたものを入れていく。」と「しかし、aが5になったらbreakで処理をやめる。」の間に「そのあと、aに1を足す」という文が抜けていませんか? (想定される正しい問題文) 「  内包表記とrangeを用いて、1から30までのリストnumを作成しなさい。  内包表記で、リストnumの中から偶数を取り除き、かつ、10以下の奇数のみで構成されるリストkisuuを作成しなさい。  その後に、空のリストguusuuを作成しなさい。    その後に関数tuikaを宣言しなさい。引数をaとして、変数abcを宣言し、kisuu[a]に1を足して、奇数を偶数にし、returnでabcを返す。  その後、a=0を宣言し、while文でaが7よりも小さい間、guusuuのリストに関数tuikaから返ってきたものを入れていく。そのあと、aに1を足す。しかし、aが5になったらbreakで処理をやめる。  最後にリストkisuuとguusuuを表示しなさい。 」
flatfalcon

2020/11/19 06:31

問題文は質問したもので間違いないです。
sfdust

2020/11/19 06:42

もしかして正しい答えは「 [1, 3, 5, 7, 9] [2, 4, 6, 8, 10] 」でしょうか? であれば多分「while文でaが7より小さい間」という部分に、処理終わりでaに1を足すという暗黙の意味が込められているのでしょうね。 仮にそうでなければ、無限ループにより答えは表示されないはずです。
sazi

2020/11/19 06:51 編集

パイソン3の課題を出す「塾」があるんですね。 あ、paizaですか。自分で解かなきゃ駄目なんじゃないの。
flatfalcon

2020/11/19 06:47

それが正しい答えです。
storm3

2020/11/19 07:36

すでに回答がでていましたね。失礼しました。
guest

回答1

0

ベストアンサー

問題ということで指摘のみ

  • a=0 とwhileのブロックのインデントが多すぎて、関数定義のなかに含まれてしまっているので、処理されていません。 インデントを1つ減らしましょう。
  • 他の過多の指摘にあるとおり、whileの中でのaのインクリメント処理が抜けています。
  • -guusuuリストにtuika関数の返り値を追加する処理がまちがえています。
  • tuika関数の呼び出しに引数がありません。 たぶん、aを指定するはず。
  • 「aが5になったら」の判定が遅すぎます。

投稿2020/11/19 06:59

TakaiY

総合スコア13790

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

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

flatfalcon

2020/11/19 07:18

a=0 while a<7: if a==5: break a+=1 guusuu.append(tuika(a)) ここまで訂正しましたが、やっぱりguusuuリストにtuika関数の返り値を追加する方法が分からないです。
sfdust

2020/11/19 07:20

インデントがわからないのでアレですが、 そのコードで「guusuuリストにtuika関数の返り値を追加する」は達成されていると思います。
flatfalcon

2020/11/19 07:27

a=0 while a<7: if a==5: break a+=1 guusuu.append(tuika(a)) 間違えました。インデントを修正したのが上記です。
TakaiY

2020/11/19 09:56

この欄では、インデントが別りませんので、 質問を修正して、修正版の全ソースを載せていただけますか? 少なくとも、「a += 1」とするタイミングはappend処理の後にする必要があります。
flatfalcon

2020/11/21 11:34

返信が遅れました。 上記の文章を、 a=0 while a<7: guusuu.append(tuika(a)) a+=1 if a==5: break の順番に訂正したら、正解にたどり着けました。 これで課題を乗り切ることができました。 アドバイスありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問