我应该设计一个程序,让用户输入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()
它一直说我不能使用关键字作为表达,我已经盯着它看了一个多小时,现在我可能已经看过了什么。
答案 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] + ': '))