1

私の質問が些細なことのように思われる場合は、お詫び申し上げます。チャットルームでこれを尋ねたいと思います。しかし、私の評判は今のところ低すぎて、Python チャット ルームで質問することはできません。私は現在、あるクラスで Python を学んでおり、先生は私たちを元気づけるために練習問題をいくつか教えてくれました。私が構築している関数は、数値リストを受け取り、それを文字列に変換します。私が抱えている問題は、if ステートメントが true と評価されないことです。変数を操作するいくつかの方法を試し、多くの print ステートメントを追加して、変数が等しくなるかどうかを確認しましたが、役に立ちませんでした。よろしくお願いします。私は多くの方法を調査して試した後にのみ尋ねることを約束しますが、今は途方に暮れています...これが私のコードです:

def nlist2string(nlist):
    characters = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
    numbers = ['0','1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25']
    newList = []
    nListLen = len(nlist)         # var msgLen will be an integer of the length

    print 'Number list before conversion: ', nlist

    index = 0
    while index < nListLen:
        print 'Index at: ', nlist[index]
        num = nlist[index]
        print 'Is num equal to nlist indexed? ', num
        newNum = num % 26

        i = 0
        while i < 26:
            num1 = newNum
            num2 = numbers[i]
            print 'num1 = ', num1
            print 'num2 = ', num2
            if (num1 == num2):
                newList.append(characters[i])
                print 'Here is the current newList: ', newList
            else:
                print 'They never equal each other.'
            i = i + 1
        index = index + 1
    return newList

    numMessage = [28, 0, 33]
    convertedNumMsg = nlist2string(numMessage)
    print 'Number list after conversion: ', convertedNumMsg
4

4 に答える 4

5

整数を文字列と比較しようとしています。定義をnumbers次のように変更してみてください。

numbers = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25]

または、numbers = range(26).

現在、 と を比較する場合num1num2のような比較4 == '4'を行うことになりますが、これは決して真ではありません。

>>> 4 == '4'
False

リストの作成方法を変更する代わりに、比較の前に整数または文字列にnumbers変換できます。num2num1num1 == int(num2)str(num1) == num2

于 2013-03-29T18:35:26.847 に答える
1

上記の回答は質問に適切に対応していますが、一般的なヒントとして、値のリストを単一の値に減らすときは、reduce関数を使用してください。もちろん、これは学習課題であることは承知していますが、その仕事に関連する組み込み関数を知っておくと役立つ場合があります。これにより、関数がはるかに短くなります。

def nlist2string(nlist):

    def convert_to_alpha(s):
        if isinstance(s,str): //check if s is already a string
            return s          //if it is, return it unchanged
        else:
            return str(unichr(s+97)) //otherwise, get the corresponding alphabet
                                     //and return that
    def reduce_func(x,y):
        //convert the numbers to alphabets
        //and join the two together
        return convert_to_alpha(x) + convert_to_alpha(y) 

    return reduce(reduce_func, nlist)

たとえば、次の出力:

l = [7,4,11,11,14]
print nlist2string(l)

は文字列"hello"です。

reduce 関数は、リストを 1 つの値に折りたたむために使用される関数と、リストの 2 つの引数を取ります。

何をするかのより簡単な例としてreduce

function add(x,y):
    return x + y

print reduce(add, [1, 4, 3, 10, 5])
//Output: 23
于 2013-03-29T18:48:33.113 に答える
1

0 ~ 25 の数字の文字列のリストがあります。
Python では、文字列が数値と等しくなることはないため、num1 == num2常に False です。

だから、そうあるべきです

numbers = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25]

より適切です(そして動作します)。

またはさらに良い

numbers = range(26)

の値を編集したくない場合はnumbers、次の条件を使用します。

if num1 == int(num2):

これにより、num2 が整数に変換されます。これが目的です。
また、その場合、次のように読みやすくするために map (Built-in Function)を使用できます。

numbers = map(str, range(26))
于 2013-03-29T18:48:00.457 に答える
0

Python では、文字列リテラルと数値は別の型のオブジェクトであり、比較して同等ではありません。

1 == "1"

False を返します。

数字の文字列のリストを繰り返し処理していますが、実際の数字のリストではありません。

手で入力する代わりに、range() 関数 (python 組み込み) を使用して数値リストを生成できます。

于 2013-03-29T18:37:30.227 に答える