<p>好吧,既然你从中得到了一些东西,我再把它分解一下。虽然我很确定我还是不明白,因此,不能解决你的问题。但是,我们可以清理一下。你知道吗</p>
<p>我还是不喜欢全局变量。现在在代码中做你想做的,但是我要告诉你<code>global</code>是一个关键字,因为它应该只在非常情况下使用。但是,因为您<code>return prize</code>并且不使用它,所以在赋值之前或之后,我用<code>return</code>值替换了全局值,并在函数之外添加了赋值。同样,这是python,而不是C。所有东西都是一个对象,通常通过引用传递。所以可以退货,不修改到位。你知道吗</p>
<p>接下来引起我注意的是<code>first</code>到<code>fourth</code>的列表理解。关于这一点,有三件事,首先是它们是在<code>with</code>块中定义的,这意味着如果打开时出错,它们可能是未定义的奖品.csv'因此我将它们初始化为<code>with</code>的空列表。接下来,这个列表理解是我们的顺序,因为<code>first</code>是第二个值,<code>second</code>是第一个值,所以我重新排列了它。最后,你到底为什么要这么做?这将生成一个值列表,这些值表示输入csv的第1列到第4列。
如果非要我猜的话,这意味着要创建CSV列中的奖品。至少该列的前4行。你知道吗</p>
<p>最后,你的问题是类型错误。这就是你来这里的原因。输出csv.reader文件是<code>str</code>的列表,您需要的值是<code>int</code>或<code>float</code>值。因此,如前所述,将字符串文本读入python值的安全方法是使用<code>ast.literal_eval()</code>函数。这可以通过两种方式实现。我认为代码中最好的地方是列表理解(我把它们放在那里就是为了这个目的)。您可以看到我在哪里添加了<code>ast.literal_eval()</code>,这个函数将一个字符串作为输入,并像解析python代码一样解析它,但不执行它(使它成为<code>eval()</code>的“安全”替代方法),这意味着当您尝试将这些数字相加时,不会得到您得到的类型错误。您得到这个类型错误是因为python是强类型的(并且是动态类型的)。这意味着您不能将<code>str</code>添加到<code>int</code>,也不会像JavaScript那样自动将<code>int</code>转换为<code>str</code>。你知道吗</p>
<pre><code>import ast
def prizesFunction():
first = []
second = []
third = []
fourth = []
with open('prizes.csv', 'r') as f:
reader = csv.reader(f)
prizePoints = list(reader)
first = [ast.literal_evel(i[0]) for i in prizePoints]
second = [ast.literal_evel(i[1]) for i in prizePoints]
third = [ast.literal_evel(i[2]) for i in prizePoints]
fourth = [ast.literal_evel(i[3]) for i in prizePoints]
choice = input('Enter your choice [0-4] : ')
choice = int(choice)
if choice == 1:
return first
elif choice == 2:
return second
elif choice == 3:
return third
elif choice == 4:
return fourth
prize = prizesFunction()
</code></pre>
<p>好的,这应该有点帮助。还有,看起来不错吧?当你在写python的时候,它开始看起来很混乱。。。你可能不是在用肾盂手术。<code>import this</code></p>