我想知道如何根据列表中剩余的项目数为列表中的某个点分配数字。
例如:
def prizeHandout(prizeWinners):
for x in range(len(prizeWinners)):
if len(prizeWinners) == 24:
prizeWinners[x][2] = (int(prize[0]))
elif len(prizeWinners) == 12:
prizeWinners[x][2] = (int(prize[1]))
elif len(prizeWinners) == 6:
prizeWinners[x][2] = (int(prize[2]))
print(prizeWinners)
我有一个全局变量'prize'
,它是一个带有奖品的列表[10, 20, 30,....]
“prizeWinners
”位于此格式的列表列表中[[ab, 2, 0], [ba, 5, 0], [aa, 12, 0], .....]
在“prizeWinners
”变量中,“prize
”的赋值应添加到当前空间[2]
,如果有,则应添加到上一个数字。
似乎无法工作。
任何帮助都将不胜感激,谢谢:)
def prizesFunction():
with open('prizes.csv', 'r') as f:
reader = csv.reader(f)
prizePoints = list(reader)
first= [i[1] for i in prizePoints]
second = [i[0] for i in prizePoints]
third = [i[2] for i in prizePoints]
fourth = [i[3] for i in prizePoints]
choice = input('Enter your choice [0-4] : ')
choice = int(choice)
global prize
if choice == 1:
prize = first
return prize
elif choice == 2:
prize =second
return prize
elif choice == 3:
prize = third
return prize
elif choice == 4:
prize = fourth
return prize
好吧,既然你从中得到了一些东西,我再把它分解一下。虽然我很确定我还是不明白,因此,不能解决你的问题。但是,我们可以清理一下。你知道吗
我还是不喜欢全局变量。现在在代码中做你想做的,但是我要告诉你
global
是一个关键字,因为它应该只在非常情况下使用。但是,因为您return prize
并且不使用它,所以在赋值之前或之后,我用return
值替换了全局值,并在函数之外添加了赋值。同样,这是python,而不是C。所有东西都是一个对象,通常通过引用传递。所以可以退货,不修改到位。你知道吗接下来引起我注意的是
first
到fourth
的列表理解。关于这一点,有三件事,首先是它们是在with
块中定义的,这意味着如果打开时出错,它们可能是未定义的奖品.csv'因此我将它们初始化为with
的空列表。接下来,这个列表理解是我们的顺序,因为first
是第二个值,second
是第一个值,所以我重新排列了它。最后,你到底为什么要这么做?这将生成一个值列表,这些值表示输入csv的第1列到第4列。 如果非要我猜的话,这意味着要创建CSV列中的奖品。至少该列的前4行。你知道吗最后,你的问题是类型错误。这就是你来这里的原因。输出csv.reader文件是
str
的列表,您需要的值是int
或float
值。因此,如前所述,将字符串文本读入python值的安全方法是使用ast.literal_eval()
函数。这可以通过两种方式实现。我认为代码中最好的地方是列表理解(我把它们放在那里就是为了这个目的)。您可以看到我在哪里添加了ast.literal_eval()
,这个函数将一个字符串作为输入,并像解析python代码一样解析它,但不执行它(使它成为eval()
的“安全”替代方法),这意味着当您尝试将这些数字相加时,不会得到您得到的类型错误。您得到这个类型错误是因为python是强类型的(并且是动态类型的)。这意味着您不能将str
添加到int
,也不会像JavaScript那样自动将int
转换为str
。你知道吗好的,这应该有点帮助。还有,看起来不错吧?当你在写python的时候,它开始看起来很混乱。。。你可能不是在用肾盂手术。
import this
首先,这是python,不是C,所以应该使用for循环
这样就不需要
range()
。”如果我需要知道索引,“我听到你问?好吧,在这种情况下,你没有,但如果你有,pythonic的方法是使用enumerate()
像这样我知道这很迂腐,但让我们看看这个简单的更改对代码的影响。你知道吗
已经感觉好多了。
现在,“奖金是一个全局变量”已经不好了。所以我们应该将其传递到函数中,然后使用默认值。
你为什么要把奖品当作智力来投?我相信你有一个很好的理由,但如果这个理由恰好是你正在将
str
转换成int
,我建议你使用ast.literal_eval()。我要删除它,因为它与你的问题没有任何关联。 至于把奖品加在获奖者身上,让我们做出改变。你知道吗我无法从你们的节目中回答的是,为什么你们要由len(获奖者)来决定奖品?我想你要做的是看看它们在数组中是什么索引。所以,这就是
enumerate()
很方便的地方。试着穿上这件衣服,如果得奖者排在得奖者名单的第25位,那么得奖者会增加10,如果得奖者排在第13位,那么会增加20,如果得奖者排在第7位,那么会增加30。你知道吗我只能说这些了。我希望你能跟我走。你知道吗
相关问题 更多 >
编程相关推荐