python,小白没太弄懂题目

P1046 [NOIP2005 普及组] 陶陶摘苹果

xxytju @ 2024-01-30 23:42:54

小白,没太搞懂题目里的输入是怎么输入,是一次性输入“数字空格数字空格。。。”这样的字符串,还是根据你的程序循环输入十一个单独的数字

用python写了两版,都显示前十个数据没接收是为啥啊。。。

字符串版本:

s = input()
my_list = s.split()
height = int(input()) + 30
sum = 0
for x in my_list: 
    if x <= height : 
    sum += 1 
print(sum)

十个数字版本:

i = 1
my_list = []
num = 0
height = int(input()) + 30
while i <= 10:
    my_list.append(int(input()))
    i += 1
for x in my_list:
    if x <= height:
        num += 1
print(num)

希望可以帮我看看,求求了


by Terrible @ 2024-01-31 00:12:13

@xxytju

题意:

读入第一行 10 个 100 到 200 之间的整数 h_i,i=1,2,...,10,每个数字之间用空格隔开;

第二行是另一个数字 H

判断有多少 i 使得 h_i<=H+30

参考通用的实现:

h=list(map(int,input().split()))
H=int(input())
res=0
for hi in h:
    if hi<=H+30:
        res+=1
print(res)

关于读入一行若干个数字转化为 list 的方法:

>>> l=list(map(int,input().split()))
100 200 150 140 129 134 167 198 200 111
>>> l
[100, 200, 150, 140, 129, 134, 167, 198, 200, 111]

注意:.split()里面一般不加 ' '.split() 的作用不等同于 .split(' ')


by Terrible @ 2024-01-31 00:18:00

第一个程序,没有将字符串转化成整数类型再参与比较,而且 if 第二行没有缩进,你不在本地调试一下吗?

另外 sum 本身是一个 Python 的内部函数,尽量不要用来作为标志符名称。

第二个程序,不仅读入的数据顺序是错误的,而且数据的读入方式也是不对的,不是分成 10 行,每行一个数字。

关于 sum 可以实现一个更节省字节的版本:

h=list(map(int,input().split()))
H=int(input())
print(sum(map(lambda x:x<=H+30,h)))

总结:对于 Python 来说,(以控制台读入的方式)读入数据要以为基础。


by xxytju @ 2024-01-31 00:20:53

@Terrible 非常感谢您的回答!学到了!


by Chong_Guang @ 2024-02-06 22:32:45

python啊,我是对了,不过是向老师求助了... ...


by Chong_Guang @ 2024-02-06 22:34:41

是,我python是对的,但大佬能不能给我讲讲c++语言怎么做呢???


by LawrenceLoyaldog @ 2024-02-18 20:17:00

python是不能直接以换行做分隔的建议用input.split()。详情见此处


|