首先,我有这个功能:
def change_pos(a, b):
temp = a
a = b
b = temp
print 'Done'
我在另一个函数中调用它,但它只打印'完成'并且什么都不做。 我直接编写代码:
a = 1
b = 2
temp = a
a = b
b = temp
工作正常。这里有什么建议吗? 其次,这是我的代码
def check_exception(list):
for element in list:
# Take list of numbers
# \s*: Skip space or not (\t\n\r\f\v), \d: Number [0-9]
# ?: Non-capturing version of regular parentheses
first = re.compile("\s*(?:\[)(\d+)\s*(?:,)").findall(element)
last = re.compile("\s*(?:,)(\d+)\s*(?:\])").findall(element)
# Convert string to integer
first_int = map(int, first)
last_int = map(int, last)
# Check and code above works
i = 0
print first_int[i]
change_pos(first_int[i],first_int[i+1])
print first_int[i+1]
print len(first_int)
#print type(first_int[0])
# Sort
# Error: list index out of range at line 47 and more
i = 0
while i < len(first_int):
if first_int[i] > first_int[i+1]:
change_pos(first_int[i], first_int[i+1])
change_pos(last_int[i], last_int[i+1])
i += 1
# Check exception
j = 0
while j < len(last_int):
if last_int[j] < first_int[j+1]:
return false
break
else:
j += 1
continue
return true
我看到: IndexError:在#Error 之后的条件下列出索引超出范围 谢谢你的帮助。 :)
答案 0 :(得分:3)
您的change_pos
函数没有任何用处,因为它只交换函数内部的变量,而不是用于调用函数的变量。实现你想要的东西的一种方法是:
def change_pos(a, b):
print 'DONE'
return b, a
然后使用它变成:
a, b = change_pos(a,b)
甚至没有功能:
a, b = b, a
其次,我相信你可以弄清楚为什么你自己会得到一个索引错误。但无论如何,这就是为什么。数组为零索引,并且您在while循环中使用last_int
的长度。现在假设last_int
的长度为5.这意味着它的索引值范围为0-4。在循环的最后一次迭代中,您试图在if语句(last_int[5]
)中访问last_int[j+1]
,这当然会给您一个索引错误。
答案 1 :(得分:1)
您可能被告知变量是内存中包含数据的位置。对于Python来说,情况并非如此。变量只是指向对象的名称。
因此,您不能在Python中编写一个函数,例如您尝试编写的change_pos函数,因为您更改的名称将是函数中使用的名称,而不是调用时使用的名称。
而不是:
a = 1
b = 2
change_pos(a, b)
你必须这样做:
a = 1
b = 2
a, b = change_pos(a, b)
该功能需要如下所示:
def change_pos(a, b):
return b, a
这给你一个暗示,有一种更简单的方法,确实存在。你可以这样做:
a = 1
b = 2
a, b = b, a
所以根本不需要功能。
由于您实际上想要在列表中交换整数,因此可以创建如下函数:
def change_pos(lst, p):
lst[p], lst[p+1] = lst[p+1], lst[p]
但我不认为这会大大增加代码的可读性。
此外,您对此使用的前缀是评论#sort
。但是你的代码没有排序。这有点像一个半假的泡泡排序,但我不知道你为什么要那样做。
答案 2 :(得分:-2)
数字在python中是不可变的。当你将它们传递给函数时,该函数可以使用变量的副本。如果你尝试使用像Lists这样的可变类型,这可能会很棘手。但是python的这个功能覆盖了一些巧妙的语法技巧。
a, b = b, a
这可以交换两个变量,而不需要任何其他功能。