def make_bill(): # makes bill
global t, c, B, cur, st, names, qty, sl , named, addd, name1, add,det, vc_id,m
price=[0.0]*10
q=0
det=['','','','','','','','']
det[2]=str(sl)
for i in range(len(sl)):
print (sl[i],' ',qty[i],' ',names[i])
for k in range(len(sl)):
cur.execute("select * from med where sl_no=?",(sl[k],))
for i in cur:
price[k]=int(qty[k])*float(i[4])
print (qty[k],price[k])
cur.execute("update med set qty_left=? where sl_no=?",(int(i[3])-int(qty[k]),sl[k]))
c.commit()
det[5]=str(random.randint(100,999))
B='bill_'+str(det[5])+'.txt'
total=0.00
for i in range(10):
if price[i] != '':
total+=price[i] #totalling
m='\n\n\n'
m+="===============================================\n"
m+=" No :%s\n\n" % det[5]
m+=" MEDPLUS CHEMIST AND DRUGGIST\n"
m+=" VIT University, Katpadi, Vellore, T.M.\n\n"
m+="-----------------------------------------------\n"
if t==1:
m+="Name: %s\n" % named
m+="Address: %s\n" % addd
det[0]=named
det[1]=addd
cur.execute('select * from cus')
for i in cur:
if i[0]==named:
det[7]=i[2]
else:
m+="Name: %s\n" % name1.get()
m+="Address: %s\n" % add.get()
det[0]=name1.get()
det[1]=add.get()
m+="-----------------------------------------------\n"
m+="Product Qty. Price\n"
m+="-----------------------------------------------\n"#47, qty=27, price=8 after 2
for i in range(len(sl)):
if names[i] != 'nil':
s1=' '
s1=(names[i]) + (s1 * (27-len(names[i]))) + s1*(3-len(qty[i])) +qty[i]+ s1*(15-len(str(price[i])))+str(price[i]) + '\n'
m+=s1
m+="\n-----------------------------------------------\n"
if t==1:
ntotal=total*0.8
m+='Total'+(' '*25)+(' '*(15-len(str(total)))) + str(total)+'\n'
m+="Valued customer Discount"+ (' '*(20-len(str(total-ntotal))))+'-'+str(total-ntotal)+'\n'
m+="-----------------------------------------------\n"
m+='Total'+(' '*25)+(' '*(12-len(str(ntotal)))) +'Rs '+ str(ntotal)+'\n'
det[3]=str(ntotal)
else:
m+='Total'+(' '*25)+(' '*(12-len(str(total)))) +'Rs '+ str(total)+'\n'
det[3]=str(total)
m+="-----------------------------------------------\n\n"
m+="Dealer 's signature:___________________________\n"
m+="===============================================\n"
print (m)
p=time.localtime()
det[4]=str(p[2])+'/'+str(p[1])+'/'+str(p[0])
det[6]=m
bill=open(B,'w')
bill.write(m)
bill.close()
cb=('cus_name','cus_add','items','Total_cost','bill_dt','bill_no','bill','val_id')
cur.execute('insert into bills values(?,?,?,?,?,?,?,?)',(det[0],det[1],det[2],det[3],det[4],det[5],det[6],det[7]))
c.commit()
我上面有这个功能。我想在下面的m
函数中使用此函数的send_mail
变量。
def send_mail(): # Sends Email
mail_from ='Admin <mail@pharmacy.store>'
mail_to ='Noor <khan.noorulameen@yahoo.com>'
msg = MIMEMultipart()
msg['From'] = mail_from
msg['To'] = mail_to
msg['Subject'] = 'Billing'
mail_body = m
msg.attach(MIMEText(mail_body))
try:
server = smtplib.SMTP_SSL('smtp.sendgrid.net', 465)
server.ehlo()
server.login('apikey', '[redacted]')
server.sendmail(mail_from, mail_to, msg.as_string())
server.close()
print("mail sent")
except:
print("issue")
我将m
变量设置为全局变量,但仍将m
设置为未定义
答案 0 :(得分:0)
执行此操作的正确方法是在模块级范围内定义m
,然后在函数之间传递。
这意味着以行make_bill()
结尾的函数return m
,以send_mail()
作为输入的m
函数,然后模块看起来像
def make_bill():
# ... and so on
return m
def send_mail(m):
# ... and so on
if __name__ == '__main__':
m = make_bill()
send_mail(m)