题目
在蓝桥镇,妮妮拥有一片美丽的果园。果园中有 N 种不同的水果树,每种水果树上的水果都有其特别的价值。妮妮记下了每种水果的价值,用一个正整数 Ai 来表示。现在妮妮想知道,如果他把果园里所有种类的水果都摘下来卖掉,他能获得多少的总价值。
你能帮助妮妮计算一下吗?
输入格式
输入的第一行包含一个整数 N,表示果园中水果的种类数。
接下来的一行包含 N 个整数 A1,A2,...,AN,分别表示每种水果的价值。
其中,满足 1≤N≤100,1≤Ai≤100。
输出格式
输出一个整数,表示妮妮可以获得的总价值。
这道题很好玩的是我本身忘了相关的知识点,写起来一直在报错,然后在改错的过程中创造出新的错误,以至于改了很久...我觉得我这一系列出错的过程是我弄懂这些东西中相当重要的,所以我把他们记录下来。
先来看思路:输入水果种类数,再输入每个水果的价值,利用循环将它们依次相加得到总价值。到这里就结束了,思路是很简单的。
再细看操作:第一遍我是这么写的
N = int(input())
value = 0
for i in range(N):
a = list(int(input().split()))
for j in a:
value = value + j
print(value)
思路没有问题,但是在输入完每个水果的价值之后开始报错:
TypeError: int() argument must be a string, a bytes-like object or a real number, not 'list'
a = list(int(input().split())) 这一行存在错误。input()函数返回一个字符串,split() 方法将字符串按照空格分隔成多个子字符串,这些子字符串存储在一个列表中。但是 int() 函数不能直接作用于一个列表,需要将 split() 得到的列表中的每个元素分别转换为整数。
将 a = list(int(input().split())) 修改为 a = list(map(int, input().split()))。这里使用了 map() 函数,它将 int 函数应用到 input().split() 生成的列表中的每个元素上,将这些元素都转换为整数。
意识到这一点之后,我修改了代码
N = int(input())
value = 0
for i in range(N):
a = list(map(int, input().split()))
for j in a:
value = value + j
print(value)
这下运行程序倒是没有报错了,但是按示例输入用空格分隔的一行水果的价值之后,并没有直接给出我想要的结果,而是又换了两次行才给出结果。
我意识到a = list(map(int, input().split()))就已经是一个列表了,它所表达的意思是这一行内所有的值都将进入这个列表,而输入的形式是用空格分隔。而我前面所加的循环,等于是把我要的重复n遍。这时我意识到按照上面这个代码我的输入应该是这样的:
- 假设输入
3
表示接下来会输入 3 组数字。- 输入
1 2 3
,4 5 6
,7 8 9
。- 程序会将这些数字拆分成列表,将列表中的元素转换为整数并相加,最终得到
1+2+3+4+5+6+7+8+9 = 45
,并输出结果。
所以在建立列表之后,我的循环n遍是没有必要的,其实无论我定义多少我都可以直接通过这样的形式输入进去,这里加一个种类的输入只是因为题目需要。所以我把这句循环去掉了,改动的代码如下:
N = int(input())
value = 0
a = list(map(int, input().split()))
for j in a:
value = value + j
print(value)
这样就对了,我们还需要对split()函数做一下介绍:
split()是字符串的一个内置方法,它用于将一个字符串根据指定的分隔符拆分成多个子字符串,并将这些子字符串存储在一个列表中。语法为:string.split(separator, maxsplit)
separator:指定分隔符。如果不提供该参数,默认的分隔符是任意的空白字符(包括空格、制表符 \t
、换行符 \n
等)。
sentence = "Hello, world! How are you?"
words = sentence.split()
print(words)
这个代码里,分隔符默认空格,所以输出结果为['Hello,', 'world!', 'How', 'are', 'you?']。
maxsplit:指定最大拆分次数。如果提供了该参数,split() 方法最多将字符串拆分成maxsplit() + 1个子字符串。
sentence = "apple,banana,cherry,date"
fruits = sentence.split(',', 2)
print(fruits)
因为限制了最大拆分次数为2,所以打印结果为['apple', 'banana', 'cherry,date']。
注意事项: