Cách gọi biến từ hàm a sang hàm b

Mình có 2 hàm là nhap() và xuat(), mình muốn sử dụng tất cả biến của hàm nhập sang hàm xuat() nhưng không biết phải làm sao

def nhap():
    dk1 = True
    while dk1 or dk2==1:
        dk1 = False
        print('Nhập mã số sinh viên:',id)
        id = int(input())
        print('Nhập tên sinh viên:',name)
        name = input()
        print('Nhập điểm sinh viên:',mark)
        mark = float(input())
        while mark < 0 or mark >10:
            print('Khoảng điểm từ 0 đến 10')
            print('Vui lòng nhập điểm lại:')
            mark = float(input())
        else: 
            if mark >=0 and mark <3.5:
                academic = 'Kém'
            elif mark >=3.5 and mark < 5:
                academic = 'Yếu'
            elif mark >=5 and mark <6.5:
                academic = 'Trung bình'
            elif mark >=6.5 and mark <8:
                academic='Khá'
            elif mark >=8 and mark<=10:
                academic = 'Giỏi'
        print(list)
        print('1/Tiếp tục')
        print('0/Thoát')
        dk2=int(input())
def xuat():
    print('Mã:',id, ' - Tên:',name,' - Điểm',mark,' - Học lực:',academic)
nhap()
xuat()

Mong mọi người chỉ bảo

Bạn có biết về biến toàn cục và biến cục bộ không? Trong trường hợp này mình thấy nếu dùng biến toàn cục thì có thể giải quyết được vấn đề của bạn. Cách 2 thì bạn có thể xem xét dùng con trỏ nhé.

3 Likes

Hợp lý nhất là dùng return để trả lại các giá trị từ hàm nhap() cho hàm xuat()

Bài toán của em nếu anh sẽ viết để sửa các mục như sau:

  • Tránh dùng quá nhiều if else vì nó làm chương trình nhiều tầng khó theo dõi.
  • Dùng break, contine để bỏ hoặc thoát vòng lặp theo điều kiện mình muốn.
  • Dùng các cấu trúc dữ liệu phù hợp khi cần thiết list, dict.

def nhap():
    danhsachSV = []
    while True:
        id = int(input("Nhập mã số sinh viên hoặc 0 để thoái: "))
        if id == 0:
            break

        name = input("Nhập tên sinh viên: ")
        while True:
            score = float(input("Nhập điểm sinh viên: "))
            if 0 <= score <= 10:
                break
            print("Khoảng điểm từ 0 đến 10")
            print("Vui lòng nhập điểm lại")

        levels = (0, 3.5, 5, 6.5, 8, 10)
        ratings = ("Kém", "Yếu", "Trung bình", "Khá", "Giỏi")
        for i in range(len(levels)):
            if score > levels[i]:
                rating = ratings[i]

        danhsachSV.append({
                "Ma": id,
                "Ten": name,
                "Diem": score,
                "Hoc luc": rating
                })
    return danhsachSV

def xuat(danhsach):
    if len(danhsach) == 0:
        print("Danh sach trong")
        return None
        
    headers = danhsach[0].keys()
    print(" - ".join(headers))
    
    for sv in danhsach:
        thongtin = [str(i) for i in sv.values()]
        dong = " - ".join(thongtin)
        print(dong)

xuat(nhap())
2 Likes

Mình muốn nâng cao hơn là khi id này đã tồn tại trong danhsachSV rồi thì sẽ phải nhập lại id thì mình phải làm sao

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?