كيف يمكننا تعديل البيانات الموجودة في الرف؟

StackOverflow https://stackoverflow.com/questions/4017733

  •  26-09-2019
  •  | 
  •  

سؤال

لقد فتحت رفًا باستخدام الكود التالي:

#!/usr/bin/python
import shelve                   #Module:Shelve is imported to achieve persistence

Accounts = 0
Victor = {'Name':'Victor Hughes','Email':'victor@yahoo.com','Deposit':65000,'Accno':'SA456178','Acctype':'Savings'}
Beverly = {'Name':'Beverly Dsilva','Email':'bevd@hotmail.com','Deposit':23000,'Accno':'CA432178','Acctype':'Current'}

def open_shelf(name='shelfile.shl'):
    global Accounts
    Accounts = shelve.open(name)          #Accounts = {}
    Accounts['Beverly']= Beverly    
    Accounts['Victor']= Victor


def close_shelf():
    Accounts.close()

أنا قادر على إلحاق القيم بالرفوف ولكن غير قادر على تعديل القيم.لقد حددت إيداع دالة () أود أن أقوم بتعديل البيانات الموجودة في الرفى. لكنه يعطيني الخطأ التالي:

Traceback (most recent call last):
  File "./functest.py", line 16, in <module>
    Deposit()
  File "/home/pavitar/Software-Development/Python/Banking/Snippets/Depositfunc.py", line 18, in Deposit
    for key in Accounts:
TypeError: 'int' object is not iterable

ها هي وظيفتي:

#!/usr/bin/python

import os                       #This module is imported so as to use clear function in the while-loop
from DB import *                       #Imports the data from database DB.py

def Deposit():
        while True:
                os.system("clear")              #Clears the screen once the loop is re-invoked
                input = raw_input('\nEnter the A/c type: ')
                flag=0
                for key in Accounts:
                        if Accounts[key]['Acctype'].find(input) != -1:
                                amt = input('\nAmount of Deposit: ')
                                flag+=1
                                Accounts[key]['Deposit'] += amt

                if flag == 0:
                        print "NO such Account!"    

if __name__ == '__main__':
        open_shelf()
        Deposit()
        close_shelf()

أنا جديد على Python.please مساعدة. قم بتصحيحني إذا كنت مخطئًا. أحتاج إلى شخص ما لتقديم القليل من التفسير حول عمل هذا الرمز.

هل كانت مفيدة؟

المحلول

أولاً ، لا تستخدم عالميًا Accounts, ، بدلاً من ذلك ، يمر ذهابًا وإيابًا. تسبب استخدام العالم خطأك. مثله:

def open_shelf(name='shelfile.shl'):
    Accounts = shelve.open(name)          #Accounts = {}
    ...
    return Accounts

def close_shelf(Accounts):
    Accounts.close()


def Deposit(Accounts):
    ...   

if __name__ == '__main__':
    Accounts = open_shelf()
    Deposit(Accounts)
    close_shelf(Accounts)

ثانياً ، لا تعيد تعريف الوظائف المدمجة. في Deposit(), ، يمكنك تعيين نتيجة raw_input إلى متغير اسمه input:

input = raw_input('\nEnter the A/c type: ')

أربعة أسطر في وقت لاحق ، تحاول استخدام المدمج input وظيفة:

amt = input('\nAmount of Deposit: ')

لكن هذا لن يعمل بسبب input تم إعادة تعريفه!

ثالثًا ، عند التكرار على العناصر المحفورة ، اتبع نمط 1) انتزاع عنصر الرفوف ، 2) عنصر متحور ، 3) كتابة عنصر متحور مرة أخرى إلى الرف. مثل ذلك:

for key, acct in Accounts.iteritems():  # grab a shelved item
    if val['Acctype'].find(input) != -1:
        amt = input('\nAmount of Deposit: ')
        flag+=1
        acct['Deposit'] += amt          # mutate the item
        Accounts[key] = acct            # write item back to shelf

(تم تعديل هذا الجزء الثالث من النصيحة من هيغدبراونإجابة.)

نصائح أخرى

أعتقد أن لديك المزيد من الحظ مثل هذا:

for key, val in Accounts.iteritems():
    if val['Acctype'].find(input) != -1:
        amt = input('\nAmount of Deposit: ')
        flag+=1
        val['Deposit'] += amt
        Accounts[key] = val
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top