Python:不能使用关键字作为表达式

时间:2013-12-07 02:56:42

标签: python

我应该设计一个程序,让用户输入12个月中每个月的总降雨量。该计划应计算并显示当年的总降雨量,月平均降雨量以及最高和最低量的月份。

def main():
    months = [0] * 12
    name_months = ['Jan','Feb','Mar','Apr','May','Jun', \
               'Jul','Aug','Sep','Oct','Nov','Dec']
    def total(months):
        total = 0
        for num in months:
            total += num
        return total
    for index in range(12):
        print ('Enter the amount of rain in',
        months[index] = input(name_months[index] + ': '))
    print ('The total is', total(months), 'mm.')
    avarage = total(months) / 12.0
    print ('The avarage rainfall is', avarage, 'months')
    m_copy = months[0:]
    months.sort()
    lowest = months[0]
    print ('Lowest is', lowest, 'in',)
    lows = []
    for i in range (12):
        if m_copy[i] == lowest:
            lows.append( name_months[i] )
    for i in range (len(lows)):
        print (lows[i],)
        if i < len(lows)-1: print ('and',)
    print
    highest = months[11]
    print ('Highest is', highest, 'in',)
    highs = []
    for i in range (12):
        if m_copy[i] == highest:
            highs.append( name_months[i] )
    for i in range (len(highs)):
        print (highs[i],)        
        if i < len(highs)-1: print ('and',)
    print

main()

它一直说我不能使用关键字作为表达,我已经盯着它看了一个多小时,现在我可能已经看过了什么。

2 个答案:

答案 0 :(得分:1)

Python通常会为您提供错误的行号,这对解决此问题非常有用。

如果你在Python 2中运行它,那么你的第一个问题就在这里:

print ('Enter the amount of rain in',
months[index] = input(name_months[index] + ': '))

第一行没有右括号,第二行有太多括号。

当我将其更改为

print ('Enter the amount of rain in'),
months[index] = input(name_months[index] + ': ')

它有效,尽管有奇怪的列表输出格式,至少在Python 2.7中(v3可能不同):

Enter the amount of rain in Jan: 1
Enter the amount of rain in Feb: 2
Enter the amount of rain in Mar: 3
Enter the amount of rain in Apr: 4
Enter the amount of rain in May: 5
Enter the amount of rain in Jun: 6
Enter the amount of rain in Jul: 7
Enter the amount of rain in Aug: 8
Enter the amount of rain in Sep: 9
Enter the amount of rain in Oct: 0
Enter the amount of rain in Nov: 1
Enter the amount of rain in Dec: 2
('The total is', 48, 'mm.')
('The avarage rainfall is', 4.0, 'months')
('Lowest is', 0, 'in')
('Oct',)

('Highest is', 9, 'in')
('Sep',)

顺便说一句,当Python已经提供了一个非常好的total()时,我就不会实现类似sum()的函数。

答案 1 :(得分:1)

我无法重现您提到的错误,但您的代码似乎有点混淆,有点太大而无法作为评论来解释。您似乎使用了混合的Python 2和Python 3代码,这些代码无法正常工作 - 例如,您似乎期望这样:

print ('and',)

打印字符串'and',但压制print通常产生的换行符。在Python 2中,它打印出来:

('and',)

在Python 3中,这个:

'and'

在两种情况下 with 换行符。

这是因为逗号在Python 2中压缩了换行符,但是括号不是语句的一部分 - 所以,你告诉它打印一个单项元组。

在Python 3中,它是一个普通的函数调用(所以括号的一部分),你可以告诉它在完成打印后在最后添加一个任意字符串 - 它默认为换行符,但您可以将其更改为,例如,这样的空格:

print('和',end ='')

您似乎也期望:

print

放一个空白行。在Python 2中,它会。在Python 3中,它不会执行任何操作 - 您需要立即调用该函数:

print()

您还会遇到使用输入方式的问题:

months[index] = input(name_months[index] + ': ')

在Python 2中,始终使用input函数被认为是一个坏主意,并且通常建议使用raw_input代替。现在input执行raw_input过去的事情 - 即,它返回字符串。其余代码假定每个months[index]都是一个数字,因此:

total += num

会做算术。当num(来自months)是一个字符串时,实际上会出现错误。解决这个问题的方法是告诉Python在你得到它之后把它变成一个数字:

months[index] = int(input(name_months[index] + ': '))