例如,我正在使用一个带有参数的函数,该函数将a0,a1,a2,a3,a4与b0,b1,b2,b3,b4进行比较。
但我想为所有参数做同样的功能。 例如:
if a0 > b0:
do this
elif a0 = b0:
do this
elif a0 < b0:
do this
因此,我希望a1和b1,a2和b2具有相同的功能......等等。这是否可以通过增量循环或者我必须手动全部写出来?如果问题令人困惑,请告诉我,我可以进行编辑。
以下是我给出的一些代码示例。
a0, a1, a2 = input().strip().split(' ')
a0, a1, a2 = [int(a0), int(a1), int(a2)]
答案 0 :(得分:1)
假设您的 2
参数的功能名称为func_a_b()
。例如:
def func_a_b(a, b):
if a > b:
print(a, "is greater than", b)
elif a == b:
print(a, "is the same as", b)
elif a < b:
print(a, "is less than", b)
解决方案:使用可变数量的参数定义一个函数:
def func(*arguments):
half = len(arguments) // 2
a_list = arguments[0:half] # [a0, a1, a2, ...]
b_list = arguments[half:] # [b0, b1, b2, ...]
for a, b in zip(a_list, b_list): # [(a0, b0), (a1, b1), (a2, b2), ...]
func_a_b(a,b) # Calling your original function in the loop
一切都是。
你可以尝试一下,例如:
a0 = 10
a1 = 11
a2 = 12
b0 = 20
b1 = 10
b2 = 12
func(a0, a1, a2, b0, b1, b2)
输出
10小于20
11大于10
12与12相同
解释:
那么,函数func()
做了什么?
在第一个声明中
half = len(arguments) // 2
它获取的参数列表(名称为arguments
),然后计算项目的数量(len ( arguments )
,并将其减半(len(arguments) // 2
)(通过整数除法(//
)来获得整数结果。)
接下来的两个陈述
a_list = arguments[0:half]
b_list = arguments[half:]
获取函数func()
的参数的前半部分和后半部分
(前半部分是您的a0
,a1
,a2
,a3
,后半部分是b0
,b1
,{{ 1}},b2
。)
最后,循环
b3
会依次调用 for a, b in zip(a_list, b_list):
func_a_b(a, b)
对,func_a_b()
等对象,这是您的目标。
注意:您可以使用更短的表格:
(a0, b0)
答案 1 :(得分:0)
为什么不使用两个列表?
for i in range(len(a)):
if a[i] > b[i]:
do this
elif a[i] == b[i]:
do this
elif a[i] < b[i]:
do this
这要求列表a
和b
包含相同数量的元素。
如果您需要在某些条件下停止,则可以申请break
。
答案 2 :(得分:0)
你可以创建一个接受两个参数的函数,并且就像它应该做的那样。然后,只需多次调用该函数,如下所示:
def f(a, b):
if a > b:
do this
elif a = b:
do this
elif a < b:
do this
f(a0, b0)
f(a1, b1)
f(a2, b2)
f(a3, b3)
f(a4, b4)
如果将变量存储在列表中以便您可以简单地迭代它,那就更好了。
答案 3 :(得分:0)
您使用的split
方法会返回值列表
而不是
a0, a1, a2 = input().strip().split(' ')
您可以使用
aValues = input().strip().split(' ')
要快速将所有值转换为整数,您可以使用list comprehension。
aValues = [int(a) for a in input().strip().split(' ')]
这只是遍历split
函数创建的列表,并为您提供仅包含每个元素的int
形式的列表。
然后,如0605002's answer中所述,您可以遍历函数中的列表并编写一次比较代码。
def (aValues, bValues):
for i in range(len(aValues)):
if aValues[i] > bValues[i]:
#do this
elif aValues[i] == bValues[i]:
#do this
else: #also, you can just put else here because if a is neither bigger nor equal to b, it must be smaller
#do this
我不确定你的评论中“不断改变论点”是什么意思,但Python中的列表是可变的,所以你可以根据需要改变元素。
aValues[3] += 4 #increase a3 by 4
aValues[4], aValues[3] = aValues[3], aValues[4] #swap a3 and a4
#or whatever else you have to do