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

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

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

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

Python

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

Q&A

解決済

1回答

1522閲覧

カードの並び替え合計値の出力

fdd

総合スコア28

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

Python

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

0グッド

0クリップ

投稿2020/10/07 01:00

カードの並び替えのプログラムで4枚のカードを選択(入力)し、その4枚のカードを24通り(重複省く)並び替え
合計値を出力します。
入力例 2 9 3 8 #カードの選択

出力例 [130, 175, 121, 175, 121, 130, 67, 67, 121, 112, 121, 112] #カード合計値

・92 + 38 = 130 ・92 + 83 = 175 ・93 + 28 = 121 
・93 + 82 = 175 ・98 + 23 = 121 ・98 + 32 = 130 ・39 + 28 = 67 
・38 + 29 = 67 ・82 + 39 = 121 ・89 + 23 = 112 ・89 + 32 = 121
・83 + 29 = 112

以下のソースコードを試したのですが、値が67,175,131,122,76,166と表示され計算値の値とは異なってしまいます。for文の書き方に誤りがあるのは推測できるのですが、なぜこの値が出力されるのかが詳しく分かりません。
ご教授いただけますと助かります。

python

1 2nyuuryoku = input().split() 3 4suuti = [int(s) for s in nyuuryoku] 5total = [] 6suuti2 = suuti 7for i in range(3): 8 x = (10 * suuti[i]) + suuti[i+1] 9 x2 =(10 * suuti[i+1]) + suuti[i] 10 for j in range(3): 11 y = (10 * suuti2[j]) + suuti[j+1] 12 y2 = (10 * suuti2[j+1]) + suuti[j] 13 ka = x + y 14 ka2 = x2 + y2 15 total.append(ka) 16 total.append(ka2) 17print(total) 18

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

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

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

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

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

marusa

2020/10/07 01:28 編集

ソースコードのアルゴリズム(このコードがどのように動作しているか)は分かりますか? もしくは、問題の正解を求めるためのアルゴリズム(どうすれば解を求められるか)は分かりますか? 質問者様の求め方に従って何が誤っているかが変わるので、よろしければ教えて頂けると幸いです。 //追記 アルゴリズムと書くときっちりしたものをイメージされるかもしれないのですが、 こんな感じで求めたい や こんな動作していると思う といったざっくりしたもので問題ありません。
fdd

2020/10/07 01:37

このソースコードがどのように動いているかは、理解が曖昧で詳しくは分かりません。 正解のアルゴリズムは大雑把にですが2重のfor文で4枚のカードを並び替える必要があると思い、カードの枚数が4枚なのでrangeは4-1=3(suutiで[i+1]をしているため)の解釈でコードを書きました。
marusa

2020/10/07 01:47

ありがとうございます。 上記のコードでは、 - iが0,1,2の場合 - iが0,1,2それぞれの場合にjが0,1,2の場合(iが0でjが0,1,2の場合、iが1でjが0,1,2...) を網羅する形になっております。 なので、iが0の場合を想定してコードを追ってみてはいかがでしょうか。 その計算過程と、正解のアルゴリズムを照らし合わせることで誤りが発見できるかと思います。
guest

回答1

0

ベストアンサー

そもそもfor文の構成自体がおかしい気がします。
またfor文内では値が重複している場合の対策が出来ていない為93+38や38+38などの計算をしてしまっています。

ka = x + y print(x, y, ka) > 29 38 67 > 93 38 131 > 38 38 76

回答の求め方は様々あると思う為、以下はあくまで参考例です。

python

1import itertools 2 3nyuuryoku = list(map(int, input().split())) # 入力を受け取って分割、int型に整形しlist化 4kumiawase = list(itertools.permutations(nyuuryoku, 4)) # nyuuryokuの全通りの組み合わせを作る 5> [(2, 9, 3, 8), (2, 9, 8, 3), (2, 3, 9, 8), (2, 3, 8, 9), (2, 8, 9, 3), (2, 8, 3, 9), 6> (9, 2, 3, 8), (9, 2, 8, 3), (9, 3, 2, 8), (9, 3, 8, 2), (9, 8, 2, 3), (9, 8, 3, 2), 7> (3, 2, 9, 8), (3, 2, 8, 9), (3, 9, 2, 8), (3, 9, 8, 2), (3, 8, 2, 9), (3, 8, 9, 2), 8> (8, 2, 9, 3), (8, 2, 3, 9), (8, 9, 2, 3), (8, 9, 3, 2), (8, 3, 2, 9), (8, 3, 9, 2)] 9 10answer = [] 11# 全通りの数値を1つずつ4分割にして取り出す 12for a, b, c, d in kumiawase: 13 x = a*10 + b # 計算式でいう左側の数字を成型。a*10(十の位)+b(一の位) 14 y = c*10 + d # 計算式でいう右側の数字を成型。c*10(十の位)+d(一の位) 15 print(x, '+', y, '=', x+y) 16 answer.append(x+y) 17print(sorted(set(answer))) # 重複している値を削除 18 19> 29 + 38 = 67 20> 29 + 83 = 112 21> 23 + 98 = 121 22>23>24>25> 83 + 29 = 112 26> 83 + 92 = 175 27> [67, 112, 121, 130, 175] 28

投稿2020/10/07 05:04

nto

総合スコア1438

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問