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

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

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

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

Python

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

3回答

1277閲覧

[1, 2, 3, ...], 2といった入力をどうやって別々の変数に入れるのか?

simakino249

総合スコア7

Python 3.x

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

Python

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2016/12/07 04:32

編集2016/12/07 04:45

###前提・実現したいこと
言語はPython3です。
独習で、以下のような問題を解いています。

あなたには正の整数の配列とある数Nが与えられます。 あなたは配列の添え字Nの要素のN乗を見つけなければいけません。 Nが配列の外にあるときは-1を返してください。 最初の要素の添え字が0であることを忘れないようにしましょう。

例題を見てみましょう:

  • 配列 = [1, 2, 3, 4] と N = 2, このとき結果は32 == 9です;
  • 配列 = [1, 2, 3] と N = 3, しかしNは配列の外なので結果は-1になります。

入力: 2つのパラメータ、配列(整数のリスト)とN(整数)。

出力: 結果(整数)

###発生している問題・エラーメッセージ
[1, 2, 3, 4],2
と入力されるものを[1, 2, 3, 4]と2に分ける方法がわかりません。

popなどを使って後ろを落としても、['[1,', '2',...
となってしまいます。。。

###該当のソースコード
input_list = input().split()
number = int(input_list[-1])

input_list = int(number)
if len(list) > num:
print(list[num]**num)
else:
print(-1)

###試したこと
pop()や[-1]などを使って一番後ろの値だけ抜こうとしてみましたが、
上記のとおりうまくいきませんでした。。。

###補足情報(言語/FW/ツール等のバージョンなど)
windows10

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

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

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

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

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

Lhankor_Mhy

2016/12/07 05:02

補足願います。与えられる入力の型はなんですか? 文字列ですか?
simakino249

2016/12/07 05:10 編集

配列(整数のリスト)とN(整数)です。 ※超初心者なので回答がズレていたらすみません。。
Lhankor_Mhy

2016/12/07 05:10

問題文を良く見ると、『入力: 2つのパラメータ』とありますが、提示されているコードは2つのパラメータを処理しているように見えません。何か前提をお間違えではないですか?
Lhankor_Mhy

2016/12/07 05:20

提示されているコードは、input関数で文字列を受け取っていますが、入力の形式は"[1, 2, 3, 4],2"で正しいのでしょうか。一般的にこのような問題で入力がテキストの場合は、文字列処理の部分も問われているのでフォーマットが明示されていると思うのですが……
simakino249

2016/12/07 05:32

「変数1 = [1, 2, 3, 4, 5](例)  変数2 = N」を設定することを目指しているのですが、2つのパラメータにそれぞれ変数を与える、という発想がそもそも間違っているのでしょうか?もし発想はあっているのであればコードが発想と一致していないのは単純に知識不足です。。
Lhankor_Mhy

2016/12/07 05:35

入力がテキストで与えられるなら(そしてそのフォーマットが提示されているものであると明示されているなら)、質問者の考え方は間違っていないと思います。しかし提示されている問題文にそのような記述が見当たりません。不明であるなら、出題者に確認してみてはいかがですか?
Lhankor_Mhy

2016/12/07 05:36

ひとことで言うなら、入力がテキストで与えられるというのは質問者の思い込みではありませんか?、というのが私の考えです。
simakino249

2016/12/07 06:02

kichirb3さんの回答を拝見して、Lhankor_Mhyさんのおっしゃっている意味がわかりました。確かにテキストというのは思い込みかもしれません。再度問題を確認してみます。ありがとうございます。
guest

回答3

0

せっかくだから回答も。めんどくさがりなのでJSONでパースします。

python

1import json 2rawData = input() 3inputList, inputN = json.loads( '[' + rawData + ']' )

投稿2016/12/07 06:26

Lhankor_Mhy

総合スコア35860

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

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

simakino249

2016/12/07 06:32

ありがとうございます!
guest

0

ベストアンサー

分割するだけであれば、以下のようなコードでいけますよ。
(もっと短く書くやり方は他の人が答えてくれるかもしれません)

python

1txt = ' [1, 2, 3, 4] , 2 ' 2x, y = txt.rsplit(',', 1) #最後の','で分割 3input_n = int(y) # Nの部分 4x = x.replace('[', '') # '['と']'を削除する。[]の前後に空白などが無いことが確実ならstrip()でもいけるはず 5x = x.replace(']', '') 6input_list = [int(i) for i in x.split(',')] # 配列の部分 7 8print(input_n) 9print(input_list)

ただ、元々の問題は

入力: 2つのパラメータ、配列(整数のリスト)とN(整数)。

とあるので、おそらく自分でパラメータを2つに分割する必要はなく、以下のようにパラメータを別々にもらう前提のプログラムを書けという意味だと思いますよ。

python

1def solve(data_list, number_n): 2 # いろいろ計算する

投稿2016/12/07 05:27

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

simakino249

2016/12/07 06:24

おっしゃるとおり、「パラメータを別々にもらう」という前提の問題でした!汗 おかげさまで解決できました。。。ありがとうございます!
guest

0

[ から ] までの間が配列ですから、そうなる部分文字列を切りだして配列を構築することになるでしょう。
考え方としては次のようになります。
0. '[' の文字が最初に出てくる場所を、入力文字列から探します(その場所をidxA とします)
0. ']' の文字が最初に出てくる場所を、入力文字列から探します(その場所をidxB とします)
0. (idxA+1) から (idxB-1) までの部分を、入力文字列から取り出します
0. 取り出した文字列を、カンマを区切りとして split して、配列にします
0. (idxB+1) から末尾までを取り出し、N とします。

実際には入力文字列が正しくない場合などのエラーチェックも必要ですね(でないとエラーで止まることになるでしょうし)

投稿2016/12/07 05:02

tacsheaven

総合スコア13703

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

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

simakino249

2016/12/07 06:26 編集

ありがとうございます! 書いてくださったとおりにやってみて、無事最後で取り出せました! input_line = input() idxA = int(input_line.find("[")) idxB = int(input_line.find("]")) the_list = input_line[idxA+1 : idxB-3] #[idxB-1]だとスペースも含まれてしまったので-3で。 print(idxA) #確認用 print(idxB) #確認用 print(the_list) #確認用 list1 = the_list.split(",") print(list1) ただ今回はそもそもの前提が間違っていたので、それを指摘してくださったkichirb3さんにBAを差し上げますm(_ _)m ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問