# 考号 数学 语文 英语
txt = '''
10153450101 82 78 68
10153450102 50 78 68
10153450103 10 20 30
'''
# 三门成绩总和少于80分??? 180才合理吧
line = txt.split('\n')
# print(line) # ['', '10153450101 82 78 68', '10153450102 50 78 68', '10153450103 10 20 30', '']
for v in line:
if v == '': continue # 跳过空行
# print(v) # 10153450101 82 78 68
arr = v.split(' ') #
# print(arr) # ['10153450101', '82', '78', '68']
count = int(arr[1]) + int(arr[2]) + int(arr[3])
print('\n学号:{} 数学:{} 语文:{} 英语:{} 总分:{}'.format(arr[0],arr[1],arr[2],arr[3],count))
if count < 80:
print('不合格 三门成绩总和少于80分')
for v in arr:
if int(v) < 60:
print('不合格 有一门成绩少于60分')
break
# 输出结果:
# 学号:10153450101 数学:82 语文:78 英语:68 总分:228
# 学号:10153450102 数学:50 语文:78 英语:68 总分:196
# 不合格 有一门成绩少于60分
# 学号:10153450103 数学:10 语文:20 英语:30 总分:60
# 不合格 三门成绩总和少于80分
# 不合格 有一门成绩少于60分
像楼上说的,如果你用固定的位置索引去读取那些分数的话很容易弄错的,可以采用直接split的方式。
首先上一个拆解版的:
data = "10153450101 82 78 68" # 假定你的数据是这样的
# 读取到了 字符串 类型的分数。strip用来去除多余的空格
scores_str = data.strip().split()
# 转成 int 类型,高级一点可以使用map函数,也可以写循环搞定
scores_int = list(map(int, scores_str))
# 写判断就好了, 判断也可以用map配合匿名函数
fail = sum(scores_int[1:]) < 180 or any(lambda x:x<60, scores_int[1:])
Python 可以写的很精炼
scores = list(map(int, data.strip().split()[1:]))
fail = sum(scores) < 180 or any(lambda x: x < 60, scores)
你好,你这样提取有可能因为各行数据的位置而报错。你可以采用下面的代码:
helpList=re.split(”\s+”,readline)#输入分割
a = list(filter(None, helpList)) #去空
total = int(a[1])+int(a[2])+int(a[3])
If total<80:
print(“the total is less than 80”)
If int(a[1])<60) or int(a[2])<60 or int(a[3])<60:
print(“one of them less than 60”)
你int的数据是切片的数组,不行的。
Int的对象只能是数字类型的数据
建议一行一组数据,每个数据之间用空格或制表符分隔,
读取的时候按分隔符分割数据