How to replace old value with new value on dictionary in python?

Question:

So im trying to change old value of variable to new value with user input. Here the code

class test():
    id = "tes"
    pwd = "1"
    role = "2"
    nama = "3"
    nip = "4"
    tl = "5"
    nomorhp = "6"
    alamat = "7"
    databaru = ""
    pilihan = ""
obj = test()

id = "tes"
pwd = "1"
role = "2"
nama = "3"
nip = "4"
tl = "5"
nomorhp = "6"
alamat = "7"
databaru = ""
pilihan = ""
jenisData = {
    "Username": id,
    "Password": pwd,
    "Role": role,
    "Nama Lengkap": nama,
    "NIP": nip,
    "Tanggal Lahir": tl,
    "Nomor HP": nomorhp,    
    "Alamat": alamat
    }
print(f"di merhod admin Username : {id}nPassword : {pwd}nRole : {role}nNama Lengkap : {nama}nNIP : {nip}nTanggal Lahir : {tl}nNomor HP : {nomorhp}nAlamat : {alamat}")
while True:
    editData = input("Data apa yang ingin diganti?: ")
    if editData in jenisData:
        datalama = jenisData[editData]
        databaru = input("Masukkan data yang baru: ")
        pilihan = input(f"Data {datalama} akan diganti ke {databaru}, anda yakin ingin menggantinya (Y/T)? ")
        print(f"nBefore callnUsername : {id}nPassword : {pwd}nRole : {role}nNama Lengkap : {nama}nNIP : {nip}nTanggal Lahir : {tl}nNomor HP : {nomorhp}nAlamat : {alamat}")
    while True:
        if pilihan == "Y" or pilihan == "y": 
            jenisData[editData] = databaru
            setattr(obj,  editData, databaru)
            print(f"nAfter callnUsername : {id}nPassword : {pwd}nRole : {role}nNama Lengkap : {nama}nNIP : {nip}nTanggal Lahir : {tl}nNomor HP : {nomorhp}nAlamat : {alamat}")
            print("Ada lagi data yang ingin diganti?")
            break

When im run it it didnt work, the Alamat value (for example) after call is still same. For example when i run code and want change Alamat value

Data apa yang ingin diganti?: Alamat
Masukkan data yang baru: 2
Data 7 akan diganti ke 2, anda yakin ingin menggantinya (Y/T)? Y

Before call
Username : tes
Password : 1
Role : 2
Nama Lengkap : 3
NIP : 4
Tanggal Lahir : 5
Nomor HP : 6
Alamat : 7

After call
Username : tes
Password : 1
Role : 2
Nama Lengkap : 3
NIP : 4
Tanggal Lahir : 5
Nomor HP : 6
Alamat : 7
Ada lagi data yang ingin diganti?
Data apa yang ingin diganti?:

The output is not expected, on print after call it should like this:

After call
Username : tes
Password : 1
Role : 2
Nama Lengkap : 3
NIP : 4
Tanggal Lahir : 5
Nomor HP : 6
Alamat : 2
Ada lagi data yang ingin diganti?
Data apa yang ingin diganti?:

How do i solve this and what part of code that wrong?

Asked By: user512512af

||

Answers:

setattr(list_usr, editData, databaru) doesnt work because in this case editData = "Alamat" but list_usr has "alamat" property. you should use lowercase "alamat" everywhere , so change last line in jenisData to "alamat": "alamat"

Answered By: Polatkan Polat
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.