-3
def punctuation(x,y):
 if len(x) == 0:
     return y

 if '.' in x[0]:
     x[1] = x[1].capitalize()
     return punctuation(x[1:],y.append(x[0]))
 elif '!' in x[0]:
     x[1] = x[1].capitalize()
     return punctuation(x[1:],y.append(x[0]))
 elif '?' in x[0]:
     x[1] = x[1].capitalize()
     return punctuation(x[1:],y.append(x[1]))
 else:
     return punctuation(x[1:],x[0])


 z = ['!a','b'] 
 punctuation(z,[])

['!a'、'b']を取得したい。つまり、最初のアイテムに(!、?、。)が含まれている場合、2番目のアイテムは大文字になります

Q3_p1 = "Enter the digit on the phone (0-9): "
Q3_p2 = "Enter the number of key presses (>0): "



def enter_msg(n):
    x=raw_input(Q3_p1)
    y=raw_input(Q3_p1)
    Jay = Jay_chou(x,y)
    return Jay

 def Jay_chou(d,n):

     if d==0: return " " 
     elif d==1: return [".", ",", "?"][n%3-1]
     elif d==2: return ["a", "b", "c"][n%3-1]
     elif d==3: return ["d", "e", "f"][n%3-1]
     elif d==4: return ["g", "h", "i"][n%3-1]
     elif d==5: return ["j", "k", "l"][n%3-1]
     elif d==6: return ["m", "n", "o"][n%3-1]
     elif d==7: return ["p", "q", "r", "s"][n%4-1]
     elif d==8: return ["t", "u", "v"][n%3-1]
     else: return ["w", "x", "y", "z"][n%4-1]


 enter_msg(2)

エラーが発生した理由がわかりません。次のように表示されます。

Enter the digit on the phone (0-9): 1

Enter the digit on the phone (0-9): 1

['1', '1']

TypeError: not all arguments converted during string formatting
4

2 に答える 2

1

2番目のprobelmの場合:

に文字列を渡すJay_Chou()のでJay = Jay_chou(x,y)はなく、整数を渡す必要があります。あなたの場合、n%3パーツはモジュラス演算の代わりに文字列フォーマットを実際に行おうとします。

raw_input()文字列を返します。を使用して文字列を整数に変換する必要がありますint()

したがって、次のエラーが発生します。

In [13]: '1'%3
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-13-39edc619f812> in <module>()
----> 1 '1'%3

TypeError: not all arguments converted during string formatting

これを試して:

Jay = Jay_chou(int(x),int(y))

次に、以下を出力します。

Enter the digit on the phone (0-9): 3
Enter the digit on the phone (0-9): 4
d

#and for 1,1:

Enter the digit on the phone (0-9): 1
Enter the digit on the phone (0-9): 1
.
于 2012-11-05T08:58:48.607 に答える
0

最初の問題については、次のようなことができます。

import itertools as it
the_list = ['a!', 'b']
result = [the_list[0]]
my_iter = iter(the_list)
next(my_iter)   #my_iter.next() for python2

for i,(a,b) in enumerate(it.izip(the_list, my_iter)):
    if set('.?!').intersection(a):
        result.append(b.capitalize())
    else:
        result.append(b)

コードの問題は、次のように呼び出すことです。

punctuation(x, y.append(something))

appendメソッドが返されるNoneため、再帰呼び出しの2番目の引数の型が間違っています。

あなたがしなければならない:

y.append(something)
punctuation(x, y)
于 2012-11-05T09:07:14.857 に答える