class Zhanghu: def init(self,money,name): self.money=money self.name=name class Quqian(Thread): def init(self,quqian_jine,zhanghu,name): Thread.init(self) self.quqian_zongshu=0 #取钱总数 self.quqian_jine=quqian_jine #取钱金额 self.name=name #线程的名字 self.zhanghu=zhanghu def run(self) : lock.acquire() #锁在这里了,你们去抢吧 print(' 看看是谁抢到了',self.name) if self.quqian_jine>self.zhanghu.money: print('谁来了??:',self.name,'现在的账户余额是:',self.zhanghu.money) print('余额不足') return sleep(2) # print('我来归还了【',self.name,'】') lock.release() #锁用完了记得归还 print('我是谁:',self.name,) self.zhanghu.money=self.zhanghu.money-self.quqian_jine #账户余额等于账户余额-取钱金额 self.quqian_zongshu=self.quqian_zongshu+self.quqian_jine #账户取钱总数等于 总数+取钱金额 print(f',,,执行的线程是{self.name},他的取钱金额是{self.quqian_jine},' f'他操作的账户是{self.zhanghu.name},该账户的余额为{self.zhanghu.money},他一共用取走了{self.quqian_zongshu}') lock=Lock() #创建一个变量 创造一个锁 a1=Zhanghu(1000,'刘义') t1=Quqian(800,a1,'t1') t2=Quqian(800,a1,'t2') t3=Quqian(800,a1,'t3') t1.start() t2.start() t3.start()
时间: 2023-06-17 20:04:37 浏览: 36
这段代码创建了一个银行账户类 Zhanghu,以及一个取款类 Quqian,Quqian 类继承自 Thread 类,表示可以作为一个线程来执行。在 Quqian 类的 run 方法中,使用了线程锁 lock,确保多个线程不会同时对同一个账户进行取款操作,从而避免了多线程操作同一数据时产生的数据不一致问题。同时,每个 Quqian 实例的对象都有自己的取款金额和线程名字,可以看到 t1、t2、t3 分别尝试从账户 a1 中取款 800 元,当账户余额不足时,会输出“余额不足”。最后,会输出每个线程的取款金额、操作的账户名字、账户余额以及该线程的取款总额。
相关问题
帮我检查代码def d(): mydb = mysql.connector.connect( host="localhost", user="root", passwd="wangzijiao2003" ) b=(input("请输入你的代号,代号请用数字书写")) e=b.isdigit() while True: if e==True: cc=int(b) print("创建成功") break else: print("创建失败") continue while True: passwd1=input("请输入你的密钥,注(密钥必须包含大小写字母)") a=passwd1.isupper()#大写 b=passwd1.islower()#小写 c=passwd1.isalpha()#字母 if (a==False)and(b==False)and(c==True): print("密钥保存成功") break else: print("仔细阅读") continue new[cc]=passwd1 if cc in new: print("ok,完成初始化") else: print("no") print("注册成功") print(new) for i1 in new.keys(): print("你的账号为") print(i1) for ii1 in new.values(): print("你的密码为") print(ii1) id=1 user2=new.keys() passwd2=new.values() sql="insert into zhanghu(id,root1,passwd1) values{}{}{}".format(id,user2,passwd2) ass=mydb.cursor() ass.execute("show databases") for kkss in ass: print(kkss) ass.execute("use myku") ass.execute("CREATE TABLE IF NOT EXISTS zhanghu1 (id int NOT NULL AUTO_INCREMENT,root1 varchar(255) NULL,passwd1 varchar(255) NULL,PRIMARY KEY (id))") ass.execute("insert into zhanghu(id,root1,passwd1) values{}".format(id,user2,passwd2)) mydb.commit() print("over")
代码存在一些错误:
1. 在第14行,应该将 `e=b.isdigit()` 移到 while 循环内部,否则在输入非数字时会造成死循环。
2. 第23行的 `new[cc]=passwd1` 应该在判断 cc 是否在 new 中之后执行。
3. 第31行的 SQL 语句有问题,应该将 VALUES 和括号之间的空格去掉,并且在 VALUES 后面加上一个括号,即 `values ({},'{}','{}')`. 另外,user2 和 passwd2 都是字典类型,需要将它们转换为列表类型。
下面是修正后的代码:
```
import mysql.connector
def d():
mydb = mysql.connector.connect(
host="localhost",
user="root",
passwd="wangzijiao2003"
)
ass = mydb.cursor()
ass.execute("show databases")
for kkss in ass:
print(kkss)
ass.execute("use myku")
ass.execute("CREATE TABLE IF NOT EXISTS zhanghu1 (id int NOT NULL AUTO_INCREMENT,root1 varchar(255) NULL,passwd1 varchar(255) NULL,PRIMARY KEY (id))")
new = {}
while True:
b = input("请输入你的代号,代号请用数字书写")
e = b.isdigit()
if e == True:
cc = int(b)
print("创建成功")
break
else:
print("创建失败")
continue
while True:
passwd1 = input("请输入你的密钥,注(密钥必须包含大小写字母)")
a = passwd1.isupper() # 大写
b = passwd1.islower() # 小写
c = passwd1.isalpha() # 字母
if (a == False) and (b == False) and (c == True):
print("密钥保存成功")
break
else:
print("仔细阅读")
continue
if cc in new:
print("no")
else:
new[cc] = passwd1
print("ok,完成初始化")
print("注册成功")
print(new)
for i1 in new.keys():
print("你的账号为")
print(i1)
for ii1 in new.values():
print("你的密码为")
print(ii1)
id = 1
user2 = list(new.keys())
passwd2 = list(new.values())
sql = "INSERT INTO zhanghu1 (id,root1,passwd1) VALUES ({},'{}','{}')".format(id, user2[0], passwd2[0])
ass.execute(sql)
mydb.commit()
print("over")
d()
```
帮我检查代码import mysql.connector new={} from ks的编写 import kss def d(): mydb = mysql.connector.connect( host="localhost", user="root", passwd="wangzijiao2003" ) b=(input("请输入你的代号,代号请用数字书写")) e=b.isdigit() while True: if e==True: cc=int(b) print("创建成功") break else: print("创建失败") continue while True: passwd1=input("请输入你的密钥,注(密钥必须包含大小写字母)") a=passwd1.isupper()#大写 b=passwd1.islower()#小写 c=passwd1.isalpha()#字母 if (a==False)and(b==False)and(c==True): print("密钥保存成功") break else: print("仔细阅读") continue new[cc]=passwd1 if cc in new: print("ok,完成初始化") else: print("no") print("注册成功") print(new) for i1 in new.keys(): print("你的账号为") print(i1) for ii1 in new.values(): print("你的密码为") print(ii1) ass=mydb.cursor() ass.execute("show databases") for kkss in ass: print(kkss) ass.execute("use myku") ass.execute("CREATE TABLE IF NOT EXISTS zhanghu1 (id int NOT NULL AUTO_INCREMENT,root1 varchar(255) NULL,passwd1 varchar(255) NULL,PRIMARY KEY (id))") ass.execute("insert into zhanghu(id,root1,passwd1) values('{}','{}')".format(b,passwd1) mydb.commit() print("over")
你的代码有一些错误,这里给你修改一下:
```python
import mysql.connector
new = {}
def d():
mydb = mysql.connector.connect(
host="localhost",
user="root",
passwd="wangzijiao2003",
database="myku"
)
while True:
b = input("请输入你的代号,代号请用数字书写")
if b.isdigit():
cc = int(b)
print("创建成功")
break
else:
print("创建失败,请重新输入")
continue
while True:
passwd1 = input("请输入你的密钥,注(密钥必须包含大小写字母)")
if any(x.isupper() for x in passwd1) and any(x.islower() for x in passwd1):
print("密钥保存成功")
break
else:
print("密钥必须包含大小写字母,请重新输入")
continue
new[cc] = passwd1
if cc in new:
print("ok,完成初始化")
else:
print("no")
print("注册成功")
print(new)
for i1 in new.keys():
print("你的账号为")
print(i1)
for ii1 in new.values():
print("你的密码为")
print(ii1)
ass = mydb.cursor()
ass.execute("CREATE TABLE IF NOT EXISTS zhanghu1 (id int NOT NULL AUTO_INCREMENT,root1 varchar(255) NULL,passwd1 varchar(255) NULL,PRIMARY KEY (id))")
ass.execute("insert into zhanghu1(root1, passwd1) values('{}', '{}')".format(cc, passwd1))
mydb.commit()
print("over")
d()
```
主要修改如下:
1. 加入 `database="myku"` 以连接到指定的数据库;
2. 在密码检查时,使用 `any` 函数来检查大小写字母是否都存在;
3. 在插入数据时,修改表名为 `zhanghu1`,并修正 SQL 语句中的字段名和占位符。