为什么这会产生无限循环?如果它没有创建一个,为什么程序会冻结?不像IDLE停止响应,它就像我创建一个无限循环一样停止,它唯一做的就是输入()。试试代码看看我的意思。 (另请告诉我,评论中的for是否正确)
Accounts = {}
def create_account(x,y,z,a):
global Accounts
Checked = False
while Checked == False:
if x in Accounts:
print("Sorry, that name has already been taken")
print("Please choose a new name")
x = input()
for dictionary in Accounts:
for key in dictionary:
if a in key:
print("Sorry, password is invalid or not avalible")
print("Please choose a new password")
a = input()
Accounts[x] = {"Proggress":y,"Points":z,"Pass":a}
print(Accounts[x])
答案 0 :(得分:1)
您的代码会创建一个无限循环,因为没有什么可以阻止它。
while checked == False
会完全听到它的声音,它会一遍又一遍地遍历代码,直到checked = True
或break
break
将停止循环,允许程序完成。
checked = True
也会停止循环
答案 1 :(得分:0)
我认为你要做的是这样的: 此代码未经测试
Accounts = {}
def create_account(x,y,z,a):
global Accounts
Checked = False
while Checked == False:
if x in Accounts:
print("Sorry, that name has already been taken")
print("Please choose a new name")
x = input()
else:
passwordOk = True
for dictionary in Accounts:
for key in dictionary:
if a in key:
passwordOk = False
break
if not passwordOk:
break
if not passwordOk:
print("Sorry, password is invalid or not avalible")
print("Please choose a new password")
a = input()
else:
Checked = True # this is the important part that you missed
Accounts[x] = {"Proggress":y,"Points":z,"Pass":a}
print(Accounts[x])
只是为了让您知道,您的代码可以进行优化。我尝试通过修改尽可能少的代码来解决您的问题,以便您能够理解问题
答案 2 :(得分:0)
造成这种情况有两个问题。
正如你所说,
print()在input()之前,而print永远不会输出,所以它没有那么远
但是,让我们退后一步:打印语句在块{
"codes" : [
{
"coupon_id" : "584559bd1f65d363bd5d25fd",
"value" : [ "FLAT30" ]
},
{
"coupon_id" : "58455a5c1f65d363bd5d2600",
"value" : [ "FLAT30", "FLAT50" ],
},
{
"coupon_id" : "584878eb0005202c64b0cc5d",
"value" : [ "FLAT30", "FLAT50", "FLAT70" ]
}
]
}
内。在第一行,您将if x in Accounts:
设置为空字典(Accounts
),因此无论Accounts = {}
是什么,此时x
永远不会为真 - 里面没有没有。
现在,您确实有一行将项目添加到x in Accounts
:
Accounts
然而,正如其他人所指出的那样,你永远不会到达这里 - 它在循环之外,并且循环永不退出,因为Accounts[x] = {"Proggress":y,"Points":z,"Pass":a}
永远不会设置为Checked
,也不会是True
1}}被叫。
您的程序基本上只是执行相同的几个步骤,而不执行任何操作:
break
吗?是的,继续循环。Checked == False
?不,跳过这个街区。x in Accounts
中的每个dictionary
,请执行一些操作,但Accounts
为空,因此我无需执行任何操作。Accounts
吗?是的,继续循环。