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

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

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

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

Q&A

解決済

6回答

276閲覧

問題が解けなくて困ってます。

izumiw

総合スコア8

Python

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

0グッド

0クリップ

投稿2018/03/16 04:50

独学でPython3を勉強しています。問題が解けずに困っているので考え方、解答例をご教授お願いします。

input()を用いて整数aを入力し、aが偶数のときはaを2で割る、
aが奇数のときは3倍して1足す操作を1になるまで繰り返す(while文を用いる)プ
ログラムを作成しなさい。
途中の計算結果も出力すること。

問題(3)の出力例
a = 11

11
34
17
52
26
13
40
20
10
5
16
8
4
2
1

よろしくおねがいします。

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

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

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

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

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

LouiS0616

2018/03/16 04:54

書きかけで良いのでコードを追記してください。これでは丸投げです。
izumiw

2018/03/16 04:56

この問題に対してのコードのイメージがわかないです。
guest

回答6

0

ベストアンサー

自分が思いますに、手順を頭の中で整理しきれないのが質問者さんの課題ではないでしょうか?

ある程度「アルゴリズム」を考えるのに慣れると、処理パターンが頭の中にうかぶようになりますが、それには訓練が必要です。

その訓練のために「フローチャート」というものを調べ、それをまず紙と鉛筆を使って書いてみる練習をしたらどうでしょうか?

投稿2018/03/16 05:13

KSwordOfHaste

総合スコア18392

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

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

izumiw

2018/03/16 05:27

いきなりコードを書くんじゃなくフローチャートに書くことからやるんですね。おっしゃるとおりイメージしやすくはなりました。お忙しい中ありがとうございました。
KSwordOfHaste

2018/03/16 05:31

慣れてくると必要なくなりますが、多分最初は大抵の人がこれやると思います。健闘を祈ります。
izumiw

2018/03/16 05:33

ありがとうございます。これからやっていきます。
guest

0

まず、丸投げはやめてくださいね。

自分なりに組んだところまででいいので、ソースを公開してください。

検索したりしたのなら、そのときのキーワードやら結果やらを提示し、

「どこが不明瞭なのか」を明示してください。

これだけでも丸投げには見えなくなります。

考え方についてですが、

一気に考えるのではなく、分割して考えてみてください。

私がやっている方法:

1. 要件を箇条書きで書き出す 2. 1をやるには何が必要か ( ファイルへの書き込み etc. ) を書き出す 3. フローチャート等を用いて流れを考える 4. 提供されているAPI ( クラス, 関数, メソッド... ) を洗い出す 5. 今までで出てきたAPIやら構造( for, if etc. ) を使って実装する

という具合に、分解して考えます。

一気に考えてもいいですが、今回みたいに「わからん」で丸投げ...になっちゃいますから。

後、余裕があれば「データ構造とアルゴリズム」や「デザインパターン」も挑戦してみてください。

フローチャートUML ( クラス図とか ) も有用ですね。

投稿2018/03/16 05:36

BeatStar

総合スコア4958

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

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

izumiw

2018/03/16 05:38

一気に考えてました。参考になります、ありがとうございます。
guest

0

python

1a = int(input()) 2print(a) 3while a != 1: 4 if a % 2 == 0: 5 a //= 2 6 else: 7 a = 3*a+1 8 print(a)

python

1a = int(input()) 2print(a) 3while a != 1: 4 a = a//2 if a % 2 == 0 else 3*a+1 5 print(a)

投稿2018/03/16 05:44

mkgrei

総合スコア8560

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

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

izumiw

2018/03/16 05:47

ありがとうございます。参考にします。
guest

0

python

1a = int(input("数字を入力してねっ >>> ")) 2while a != 1: 3 if (a & 1): 4 a = 3*a+1 5 else: 6 a /= 2 7 print(a)

投稿2018/03/16 05:22

編集2018/03/16 05:58
tachikoma

総合スコア3601

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

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

izumiw

2018/03/16 05:27

丸投げの質問で申し訳ありませんでした。。ありがとうございます。
guest

0

python

1a = int(input()) 2 3while a > 0 and a != 1: 4 print(a) 5 a = a // 2 if (a % 2 == 0) else a * 3 + 1 6else: 7 print(a)

print 文の位置がどこにあるあるべきかを少し検討して工夫してみました。

備考: この計算式について

  • Pythonでコラッツの問題

http://d.hatena.ne.jp/xef/20120720/p1

投稿2018/03/17 01:12

katoy

総合スコア22324

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

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

0

さて、コードのイメージがわかないというのは
剰余演算子もしくはビット演算子の存在をまだ知らないとかですかね

偶数であるか調べるのは、普通にやれば if n%2==0:
ちょっと通ぶったやり方だと if !(n&1):

偶数であるかどうかというのは
2進数で一桁目が0であるということですから
ビット演算子で事足ります

ビット演算でできることは
ビット演算でやるようにしとくと処理速度的に良

もし、まだwhile文の書き方とかさえわからない
とかいうレベルなら正直どうしようもないです

投稿2018/03/16 05:40

KazuhiroHatano

総合スコア7802

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

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

izumiw

2018/03/16 05:48

勉強しなおします。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問