求大神帮忙看看,python的强制类型转换问题

2024-11-08 03:50:21
推荐回答(5个)
回答1:

# 考号 数学 语文 英语
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分

回答2:

像楼上说的,如果你用固定的位置索引去读取那些分数的话很容易弄错的,可以采用直接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)

回答3:

你好,你这样提取有可能因为各行数据的位置而报错。你可以采用下面的代码:
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”)

回答4:

你int的数据是切片的数组,不行的。
Int的对象只能是数字类型的数据

回答5:

建议一行一组数据,每个数据之间用空格或制表符分隔,
读取的时候按分隔符分割数据