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

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

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

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

Q&A

解決済

3回答

1933閲覧

入力値の適切な書き方

tootootoo

総合スコア20

Python 3.x

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

0グッド

0クリップ

投稿2018/11/23 12:16

独学でpythonを勉強している初心者です。
ある程度知識もついてきたので、「trackのサンプル問題」に手を出してみました。

お題「与えられたn個の文字列cにROT13の処理を施し、その結果を返す関数を作成してください。」というものです。
どうやったらいいかはわかります。しかし、問題にあったような回答作成をすることができません。
入力値が引数として渡されて、答えを標準出力に表示するCLIアプリケーションを実装すればよいのですが、入力値の書き方がうまくわかりません。

python

1 2import sys 3 4def main(argv): 5 # このコードは引数と標準出力を用いたサンプルコードです。 6 # このコードは好きなように編集・削除してもらって構いません。 7 # --- 8 # This is a sample code to use arguments and outputs. 9 # Edit and remove this code as you like. 10 11 for i, v in enumerate(argv): 12 print("argv[{0}]: {1}".format(i, v)) 13 14if __name__ == '__main__': 15 main(sys.argv[1:])

出題者から渡されたスクリプトは上記です。

python

1入出力例 2$ ./rot13 "ABcDEf" 3NOpQRs 4 5$ ./rot13 "123abc" "vffhr#789" 6123nop 7issue#789 8 9$ ./rot13 "123abc vffhr#789" 10123nop issue#789

入出力結果は上記です。

質問は以下です。

入力データをコマンドライン引数?で持ってこい!と書かれてありましたが、どうすればよいのかさっぱりです。
まず入力データがどれなのかわかりません。この場合は自分で勝手に入力データを作ってよいのでしょうか。ただ問題には与えられた文字列とか書かれていますし、、、、。

正直、どうすればよいのかわからないという状況なので、詳しく質問することができません。なので、何を言っているかわからないとは思いますが、どうぞよろしくお願いします。

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

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

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

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

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

guest

回答3

0

まずは、出題者から渡されたスクリプトそのもを実行させ、理解してください。
x.py

python3

1import sys 2 3def main(argv): 4 for i, v in enumerate(argv): 5 print("argv[{0}]: {1}".format(i, v)) 6 7if __name__ == '__main__': 8 main(sys.argv[1:])

実行例:
イメージ説明

全部は理解できなくても、 print("argv[{0}]: {1}".format(i, v)) で
コマンドライン引数が、何番目かと その値を表示していることだけは読み取ってください。

コマンドライン引数の値を得るだけなら、 print(v) で良いはずと見当をつけてください。
そして、実際に試してみてください。

python3

1import sys 2 3def main(argv): 4 for i, v in enumerate(argv): 5 print(v) 6if __name__ == '__main__': 7 main(sys.argv[1:])

実行例;
イメージ説明

次に rot1e() (なにも変換処理をしない) を作ってみます。
print(V) を print(rot13(v)) に変更して、実行してみます。
先程と同じ実行結果になるはずです。

python3

1import sys 2 3def rot(v): 4 return v 5 6def main(argv): 7 for i, v in enumerate(argv): 8 print(rot13(v)) 9if __name__ == '__main__': 10 main(sys.argv[1:])

後は、rot13() の中身を正しく作っていくだけです。

投稿2018/11/24 00:19

katoy

総合スコア22324

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

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

0

ベストアンサー

入力値の書き方ってまさに入出力例にあるものだと思いますよ?

たとえば rot13.py というPythonスクリプトを書いたとしたら、こうなっていればいいのではないでしょうか。

入出力例 $ python rot13.py "ABcDEf" NOpQRs $ python rot13.py "123abc" "vffhr#789" 123nop issue#789 $ python rot13.py "123abc vffhr#789" 123nop issue#789

まずは与えられたスクリプトをそのまま使って、上記の方法で実行してみてください。
ROT13の処理はまだ書かれていませんが、コマンドライン引数をPythonスクリプト内のどこで処理しているかわかるはずです。

投稿2018/11/23 13:57

編集2018/11/23 14:00
mather

総合スコア6753

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

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

tootootoo

2018/11/23 16:12

おつしゃる通りにコードを書くと、満点を取ることができました! ありがとうございます。
guest

0

入力データをコマンドライン引数?で持ってこい!と書かれてありましたが、どうすればよいのかさっぱりです。

まず入力データがどれなのかわかりません。この場合は自分で勝手に入力データを作ってよいのでしょうか。ただ問題には与えられた文字列とか書かれていますし、、、、。

Pythonインタプリタを起動するときに渡します。
例えばこんな感じです。

$ python main.py spam ham egg

投稿2018/11/23 12:24

LouiS0616

総合スコア35658

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問