- 締切済み
Pythonでのプログラミングについて。
Pythonでのプログラミングについて。 大学の授業でPythonが出たのですが、なんせ先生が適当すぎてさっぱり意味がわかりません・・; 以下の問題の答えか、もしくは解説してくれる方はいらっしゃいませんでしょうか。 Q1:オレンジの数(count)を受け取って、"Number of oranges:<count>"を返すorange関数(a)を書け。 ただし、countが10以上の場合は実際の値のかわりに"many"を使え。 def orange(count): (a) return str print orange(4) print orange(99) Q2:文字列を受け取って、最初と最後の各2文字から作成した文字列を返すboth_ends関数(b)を書け。 ただし、文字列の長さが1のときは空文字列を返せ。 def both_ends(coun): (b) return str print both_end("hello") print both_end("a") Q3:文字列を反転するプログラム(c)を書け。 orig="hello" (c) print result Q4:文字列を反転するreverse関数(d)を書け。 (d) orig="good" result=reverse(orig) print result Q5:キーボードから受け取った文字列が回文(palindrome)かどうか判定するプログラム(e)を書け。 (d) orig=raw_input("Type a phrease:") result=reverse(orig) (e) Type a phrease:alice reverse=ecila Type a phrease:anna **palindrome** 自分で本を読んだり色々調べてみたのですが、判りませんでした。。 今日の12時までなのですが、誰かお願いします(;_;)
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- kmee
- ベストアンサー率55% (1857/3366)
時間切れですけど。 ・Pythonでは、型の違いをはっきりと区別します。この点はPerl等と異なります。 ・どんなプログラムでもそうですが、作ろうとする関数等の仕様をちゃんと確認しましょう。 すくなくとも、使ってる変数が何をあらわすものなのかは、把握しておきましょう。 ということで >def orange(count): > if count>=10: > str="many" > else: > str=count countは数値で、return strで文字列を返す仕様なのに、str=countではよくないです。 str=str(count) 等と変換するべきです。 この後 str="Number of oranges:" + str とすれば、希望のものになります。 あるいは、 if count>=10: str="Number of orange:many" else: str="Number of orange:%d" % count と、(CやPerlのsprintfにあたる) %演算子を使うとより簡単に変換できます。 >def both_end(coun): >if coun>=2 : 入力のcounは文字列のはずです。よって、数値2とは比較できません。 式自体はエラーにならず、True/Falseを返しますが、それは、オブジェクトのIDの比較であって、文字列長での比較でも、数値化した比較でも、ありません (実際、今やったら "1" >= 4 が Trueになりました) 文字列長は関数lenを使用して求めます if len(coun) >= 2 : >str=[:2]+[-2:] []によるスライスを行うには、前に(文字列等の)シーケンス型が必要です。 単独では使えません。というより、何をスライスするかがわかりません。 今回のは入力文字列をスライスするので str=coun[:2] + coun[-2:] となります。 Q3: (c)の後ろをみると、結果を変数resultに入れろ、ということのようです。 考えかたとして、result=""としたあとで 1)origの最後から順に取り出し、resultの後ろに付け足す #origの一番最後がresultの先頭、 #origの後から2番がresultの2文字目..... for i in xrange(len(orig)): c=orig[-1-i] # -1 result += c 2) 1)とは逆順にorigの最初から取り出し、resultの最初に付け足す for c in orig: # 文字列はシーケンス型なので、こういう書き方も可能 result = c + result 3)文字列をリストに分解→reverse→join l=list(orig) #1文字ずつのリストに変換 l.reverse() # reverseメソッドはリストそのものを書きかえる result="".join(l) Q4 Q3を関数化するだけです。引数が何で、戻り値が何かを考えれば簡単です。 字下げに注意しましょう Q5 (e)の下は実行の様子でしょう。それを参考にすれば if result == orig : #文字列同士の比較は、内容を一文字ずつ比べる print "**palindrome**" else: print "reverse=" + result
- koko_u_u
- ベストアンサー率18% (216/1139)
>自分で本を読んだり色々調べてみたのですが、判りませんでした。。 この手の質問をするときは、「このようにコーディングしたが、期待に反してこのようになってしまった」というのを書くと回答がもらいやすいですよ。
- osamuy
- ベストアンサー率42% (1231/2878)
Q1は(1)の「ただし...」のところを実装できればよいかと。条件分岐の知識と比較演算の知識が求められます。returnの戻り値の記述に注意。 Q2は(1)の応用。文字列演算(文字数、部分文字列)の知識が必要です。 Q3は文字列演算とループ処理の知識があればできます。あるいは配列演算の知識がもとめられているのかもしれません。 Q4はQ3ができているなら、あとは関数記述の知識があれば問題ありません。 Q5は関数呼び出しの知識と比較演算の知識が必要です。Q1~Q4を理解しているなら、楽勝でしょう。 とりあえず、こんなところでは。
補足
ご回答ありがとうございます。 Q1はただし、のところはifを使ってかけたのですが、Number~と数値をつなげて表示させるところが判りません; 他の問題も与えられたキーワードを検索して何回かやってみましたが、さっぱり理解出来ませんでした。。
補足
ご回答ありがとうございます。 コーディングの意味がわからないのですが、 自分で書いたものは、 Q1 def orange(count): if count>=10: str="many" else: str=count return str Q2 def both_end(coun): if coun>=2 str=[:2]+[-2:] else: str=" " return str といった感じですm(__)m