无法将'int'转换为字符串

时间:2017-11-26 19:59:17

标签: python string int typeerror bubble-sort

我是一名蟒蛇新手,因为我是一名10年级的学生,正在攻读GCSE计算机科学。我正在尝试对冒泡排序算法进行编码,我对TypeError: Can't convert 'int' object to str implicitly感到磕磕绊绊,因为我使用x同时检查了lengthisinstance(),所以我一无所知都是整数。有人帮忙! :)

到目前为止,这是我的代码:

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 个答案:

答案 0 :(得分: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'
>>> 

答案 1 :(得分:0)

错误发生在join(list1)电话中。 str.join需要可迭代的字符串 。但是,list1是一个整数列表。因此,它出错了。

您可以通过将列表的元素映射到str等效项来修复错误本身,方法是:

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

但话虽如此,代码很容易出错:

  1. 在迭代列表时添加和删除项目;
  2. 您使用x来计算订购的元素和交换元素;
  3. 你从未在气泡循环后重置x,因此你会计算两次气泡。
  4. 此外,抓住IndexError非常不优雅,因为您还可以限制i的范围。
  5. 可能更优雅的解决方案是:

    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