2017-11-26 2 views
-1

私はGCSEコンピュータサイエンスを勉強している年10人の学生として、私はちょっと新しいpythonです。私はバブルソートアルゴリズムをコーディングしようとしています。TypeError: Can't convert 'int' object to str implicitlyにつまずいています。xlengthの両方をチェックしたところ、彼らは両方とも整数です。誰か助けて! :)ここで'int'を文字列に変換できません

は、これまでの私のコードです:

x = 1 
list1 = list(input("What numbers need sorting? Enter them as all one - ")) 
length = len(list1) 
print(list1) 
while True: 
    for i in range(0,length): 
     try: 
      if list1[i] > list1[i+1]: 
       x = list1[i] 
       list1.remove(x) 
       list1.insert(i+1,x) 
       print(list1) 
      if list1[i] < list1[i+1]: 
       x += 1 
       print(list1) 
     except IndexError: 
      break 
    if x == length: 
     print("The sorted list is - ",''.join(list1)) 
     break 
+2

それを反復しながら、リストを変更しないでください。さらに、ここで 'x'はソートされたインスタンスを数え、要素を入れ替えるという2つの目的で使用します。 –

+0

'x'に文字列値を代入しようとしています:' x = list1 [i] '。リスト 'list1'は、整数ではなく文字列のリストです。 –

+0

このコードはpython 3で正しく動作します。このcodをpython2で使用していますか? –

答えて

0

エラーがjoin(list1)コールです。 str.joinは、の繰り返し可能性があります。文字列です。しかしlist1は整数のリストです。結果として、それは間違っています。

あなたは、書面により、str同等に、リストの要素をマッピングすることにより、エラー自体を修正することができます。

print("The sorted list is - ",''.join(map(str,list1))

しかし、言われていること、コードが発生しやすい、非常にエラー:

  1. リストを反復処理しながらアイテムを追加したり削除したりします。
  2. xを使用すると、順序付けされた要素を数えたり、要素を入れ替えることができます。
  3. バブルループ後にxをリセットすることはありません。したがって、気泡を2回カウントします。
  4. さらにIndexErrorをキャッチすることは、iの範囲を制限することができるので、非常に控えめです。

おそらくよりエレガントな解決策は以下のとおりです。

unsorted = True 
while unsorted: 
    unsorted = False # declare the list sorted 
         # unless we see a bubble that proves otherwise 
    for i in range(len(l)-1): # avoid indexerrors 
     if l[i] > l[i+1]: 
      unsorted = True # the list appears to be unsorted 
      l[i+1], l[i] = l[i], l[i+1] # swap elements 

print(l) # print the list using repr
+0

他の人の言われたように、 'list(input()'を 'int(input()'に変更してリストに変換してから、あなたのメソッドを使って要素をマッピングし、要素を入れ替えてください。 – Crawley

0

list1は、おそらく(整数で構成され、それが中にどのようなユーザーの種類に依存するが、それはのリストを想定しているかのようにコードをほとんど書かれています整数)それは、文字列が含まれているかのようにあなたがそれに''.joinを使用します。

>>> ''.join([0]) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: sequence item 0: expected string, int found 
>>> ''.join(['0']) 
'0' 
>>> 
関連する問題