こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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時までなのですが、誰かお願いします(;_;)

投稿日時 - 2010-05-05 21:02:34

QNo.5874136

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

12人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

時間切れですけど。
・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

投稿日時 - 2010-05-06 21:30:37

ANo.2

>自分で本を読んだり色々調べてみたのですが、判りませんでした。。

この手の質問をするときは、「このようにコーディングしたが、期待に反してこのようになってしまった」というのを書くと回答がもらいやすいですよ。

投稿日時 - 2010-05-05 22:31:35

補足

ご回答ありがとうございます。
コーディングの意味がわからないのですが、
自分で書いたものは、
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

投稿日時 - 2010-05-05 22:40:26

ANo.1

Q1は(1)の「ただし...」のところを実装できればよいかと。条件分岐の知識と比較演算の知識が求められます。returnの戻り値の記述に注意。

Q2は(1)の応用。文字列演算(文字数、部分文字列)の知識が必要です。

Q3は文字列演算とループ処理の知識があればできます。あるいは配列演算の知識がもとめられているのかもしれません。

Q4はQ3ができているなら、あとは関数記述の知識があれば問題ありません。

Q5は関数呼び出しの知識と比較演算の知識が必要です。Q1~Q4を理解しているなら、楽勝でしょう。

とりあえず、こんなところでは。

投稿日時 - 2010-05-05 21:13:56

補足

ご回答ありがとうございます。
Q1はただし、のところはifを使ってかけたのですが、Number~と数値をつなげて表示させるところが判りません;
他の問題も与えられたキーワードを検索して何回かやってみましたが、さっぱり理解出来ませんでした。。

投稿日時 - 2010-05-05 22:29:44