Python 为什么未检测到全局标志?
目标是在p1或p2获胜后,从“循环时的最终结果”(添加为注释)中得出。我创建了一个全局标志,该标志最初为False,但一旦winningfunc()返回result1或result 2等于3,该标志将变为True。我知道可能会有些冗长,但我对python或任何类型的编码都是新手 试着做一个简单的抽搐。感谢您的帮助:)Python 为什么未检测到全局标志?,python,python-3.x,Python,Python 3.x,目标是在p1或p2获胜后,从“循环时的最终结果”(添加为注释)中得出。我创建了一个全局标志,该标志最初为False,但一旦winningfunc()返回result1或result 2等于3,该标志将变为True。我知道可能会有些冗长,但我对python或任何类型的编码都是新手 试着做一个简单的抽搐。感谢您的帮助:) frame=[[“”,“|”、“”、“|”、“”、, ["-","-","-","-","-"], [" ","|"," ","|"," "], ["-","-","-","-",
frame=[[“”,“|”、“”、“|”、“”、,
["-","-","-","-","-"],
[" ","|"," ","|"," "],
["-","-","-","-","-"],
[" ","|"," ","|"," "]]
#名称分配
尽管如此:
p1_name=输入(“输入播放器1名称:”)
p2_name=输入(“输入玩家2名称:”)
如果p1_name.lower()==p2_name.lower():
打印(“输入的两个名称相同,请重新输入!”)
其他:
打破
#符号赋值
尽管如此:
p1_nt=input(f{p1_name},选择要播放的“X”或“O”:)
如果p1\u nt.lower()=“x”:
p1\u nt=“X”
p2\u nt=“O”
打印(f“{p1_name}将与'X'一起播放,{p2_name}将与'O'一起播放)
打破
elif p1\u nt.lower()=“o”:
p1\u nt=“O”
p2\u nt=“X”
打印(f“{p1_name}将与'O'一起播放,{p2_name}将与'X'一起播放)
打破
其他:
打印(“输入的符号错误,请重新输入!”)
#口述
dc={“1:[4,0],“2:[4,2],“3:[4,4],“4:[2,0],“5:[2,2],“6:[2,4],“7:[0,0],“8:[0,2],“9:[0,4]}
#获胜逻辑定义
flag=False
def winningfunc():
def mf(v1、v2、v3):
结果1=0
结果2=0
对于范围内的x(v1、v2、v3):
如果帧[dc[str(x)][0][dc[str(x)][1]==p1\n:
结果1+=1
elif帧[dc[str(x)][0][dc[str(x)][1]==p2\u-nt:
结果2+=1
其他:
通过
如果结果1==3:
flag=True
打印(f“恭喜,{p1_name}获胜!”)
elif结果2==3:
flag=True
打印(f“恭喜,{p2_name}获胜!”)
其他:
通过
mf(1,4,1)#对于c4
mf(4,7,1)#用于c2
mf(7,10,1)#对于c0
mf(1,10,4)#适用于d1
mf(3,8,2)#对于d2
mf(1,8,3)#对于r0
mf(2,9,3)#对于r2
mf(3,10,3)#对于r3
#付款人输入循环
而非标志:#用于最终结果
为True时:#用于p1数据填充
s1=输入(f“{p1_name}轮到你了:”)
如果0访问全局标志
,则需要在方法开头指定它是全局的。此外,在轮到玩家2之前,你应该检查旗帜是否正确。以下是工作代码:
frame=[[" ","|"," ","|"," "],
["-","-","-","-","-"],
[" ","|"," ","|"," "],
["-","-","-","-","-"],
[" ","|"," ","|"," "]]
# Name assignment
while True:
p1_name=input("Enter player 1 name: ")
p2_name=input("Enter player 2 name: ")
if p1_name.lower()==p2_name.lower():
print("Both names entered are same, please re-enter!")
else:
break
# Notation assignment
while True:
p1_nt=input(f"{p1_name}, choose 'X' or 'O' to play with: ")
if p1_nt.lower()=="x":
p1_nt="X"
p2_nt="O"
print(f"{p1_name} will play with 'X' & {p2_name} will play with 'O'")
break
elif p1_nt.lower()=="o":
p1_nt="O"
p2_nt="X"
print(f"{p1_name} will play with 'O' & {p2_name} will play with 'X'")
break
else:
print("Entered notation is wrong, please re-enter!")
# dict
dc={"1":[4,0],"2":[4,2],"3":[4,4],"4":[2,0],"5":[2,2],"6":[2,4],"7":[0,0],"8":[0,2],"9":[0,4]}
# winning logic definition
flag=False
def winningfunc ():
global flag
def mf(v1,v2,v3):
global flag
result1=0
result2=0
for x in range(v1,v2,v3):
if frame[dc[str(x)][0]][dc[str(x)][1]]==p1_nt:
result1+=1
elif frame[dc[str(x)][0]][dc[str(x)][1]]==p2_nt:
result2+=1
else:
pass
if result1==3:
flag=True
print(f"Congratulations, {p1_name} wins! ")
elif result2==3:
flag=True
print(f"Congratulations, {p2_name} wins! ")
else:
pass
mf(1,4,1) # for c4
mf(4,7,1) # for c2
mf(7,10,1) # for c0
mf(1,10,4) # for d1
mf(3,8,2) # for d2
mf(1,8,3) # for r0
mf(2,9,3) # for r2
mf(3,10,3) # for r3
# loop for payer input
while not flag: # for final result
while True: # for p1 data filling
s1=input(f"{p1_name} its your turn: ")
if 0<=int(s1)<=9 and frame[dc[str(s1)][0]][dc[str(s1)][1]]==" ":
if p1_nt=="X":
frame[dc[str(s1)][0]][dc[str(s1)][1]]="X"
else:
frame[dc[str(s1)][0]][dc[str(s1)][1]]="O"
break
else:
print(f"Wrong entry {p1_name}, try once again!")
x1=None
for x1 in range(len(frame)):
f1="".join(frame[x1])
print(f1)
# Result check for p1
winningfunc()
if flag:
break
while True: # for p2 data filling
s2=input(f"{p2_name} its your turn: ")
if 0<=int(s1)<=9 and frame[dc[str(s2)][0]][dc[str(s2)][1]]==" ":
if p2_nt=="X":
frame[dc[str(s2)][0]][dc[str(s2)][1]]="X"
else:
frame[dc[str(s2)][0]][dc[str(s2)][1]]="O"
break
else:
print(f"Wrong entry {p2_name}, try once again!")
x2=None
for x2 in range(5):
f2="".join(frame[x2])
print(f2)
# Result check for p2
winningfunc()
frame=[[“”,“|”、“”、“|”、“”、,
["-","-","-","-","-"],
[" ","|"," ","|"," "],
["-","-","-","-","-"],
[" ","|"," ","|"," "]]
#名称分配
尽管如此:
p1_name=输入(“输入播放器1名称:”)
p2_name=输入(“输入玩家2名称:”)
如果p1_name.lower()==p2_name.lower():
打印(“输入的两个名称相同,请重新输入!”)
其他:
打破
#符号赋值
尽管如此:
p1_nt=input(f{p1_name},选择要播放的“X”或“O”:)
如果p1\u nt.lower()=“x”:
p1\u nt=“X”
p2\u nt=“O”
打印(f“{p1_name}将与'X'一起播放,{p2_name}将与'O'一起播放)
打破
elif p1\u nt.lower()=“o”:
p1\u nt=“O”
p2\u nt=“X”
打印(f“{p1_name}将与'O'一起播放,{p2_name}将与'X'一起播放)
打破
其他:
打印(“输入的符号错误,请重新输入!”)
#口述
dc={“1:[4,0],“2:[4,2],“3:[4,4],“4:[2,0],“5:[2,2],“6:[2,4],“7:[0,0],“8:[0,2],“9:[0,4]}
#获胜逻辑定义
flag=False
def winningfunc():
全球旗帜
def mf(v1、v2、v3):
全球旗帜
结果1=0
结果2=0
对于范围内的x(v1、v2、v3):
如果帧[dc[str(x)][0][dc[str(x)][1]==p1\n:
结果1+=1
elif帧[dc[str(x)][0][dc[str(x)][1]==p2\u-nt:
结果2+=1
其他:
通过
如果结果1==3:
flag=True
打印(f“恭喜,{p1_name}获胜!”)
elif结果2==3:
flag=True
打印(f“恭喜,{p2_name}获胜!”)
其他:
通过
mf(1,4,1)#对于c4
mf(4,7,1)#用于c2
mf(7,10,1)#对于c0
mf(1,10,4)#适用于d1
mf(3,8,2)#对于d2
mf(1,8,3)#对于r0
mf(2,9,3)#对于r2
mf(3,10,3)#对于r3
#付款人输入循环
而非标志:#用于最终结果
为True时:#用于p1数据填充
s1=输入(f“{p1_name}轮到你了:”)
如果0访问全局标志
,则需要在方法开头指定它是全局的。此外,在轮到玩家2之前,你应该检查旗帜是否正确。以下是工作代码:
frame=[[" ","|"," ","|"," "],
["-","-","-","-","-"],
[" ","|"," ","|"," "],
["-","-","-","-","-"],
[" ","|"," ","|"," "]]
# Name assignment
while True:
p1_name=input("Enter player 1 name: ")
p2_name=input("Enter player 2 name: ")
if p1_name.lower()==p2_name.lower():
print("Both names entered are same, please re-enter!")
else:
break
# Notation assignment
while True:
p1_nt=input(f"{p1_name}, choose 'X' or 'O' to play with: ")
if p1_nt.lower()=="x":
p1_nt="X"
p2_nt="O"
print(f"{p1_name} will play with 'X' & {p2_name} will play with 'O'")
break
elif p1_nt.lower()=="o":
p1_nt="O"
p2_nt="X"
print(f"{p1_name} will play with 'O' & {p2_name} will play with 'X'")
break
else:
print("Entered notation is wrong, please re-enter!")
# dict
dc={"1":[4,0],"2":[4,2],"3":[4,4],"4":[2,0],"5":[2,2],"6":[2,4],"7":[0,0],"8":[0,2],"9":[0,4]}
# winning logic definition
flag=False
def winningfunc ():
global flag
def mf(v1,v2,v3):
global flag
result1=0
result2=0
for x in range(v1,v2,v3):
if frame[dc[str(x)][0]][dc[str(x)][1]]==p1_nt:
result1+=1
elif frame[dc[str(x)][0]][dc[str(x)][1]]==p2_nt:
result2+=1
else:
pass
if result1==3:
flag=True
print(f"Congratulations, {p1_name} wins! ")
elif result2==3:
flag=True
print(f"Congratulations, {p2_name} wins! ")
else:
pass
mf(1,4,1) # for c4
mf(4,7,1) # for c2
mf(7,10,1) # for c0
mf(1,10,4) # for d1
mf(3,8,2) # for d2
mf(1,8,3) # for r0
mf(2,9,3) # for r2
mf(3,10,3) # for r3
# loop for payer input
while not flag: # for final result
while True: # for p1 data filling
s1=input(f"{p1_name} its your turn: ")
if 0<=int(s1)<=9 and frame[dc[str(s1)][0]][dc[str(s1)][1]]==" ":
if p1_nt=="X":
frame[dc[str(s1)][0]][dc[str(s1)][1]]="X"
else:
frame[dc[str(s1)][0]][dc[str(s1)][1]]="O"
break
else:
print(f"Wrong entry {p1_name}, try once again!")
x1=None
for x1 in range(len(frame)):
f1="".join(frame[x1])
print(f1)
# Result check for p1
winningfunc()
if flag:
break
while True: # for p2 data filling
s2=input(f"{p2_name} its your turn: ")
if 0<=int(s1)<=9 and frame[dc[str(s2)][0]][dc[str(s2)][1]]==" ":
if p2_nt=="X":
frame[dc[str(s2)][0]][dc[str(s2)][1]]="X"
else:
frame[dc[str(s2)][0]][dc[str(s2)][1]]="O"
break
else:
print(f"Wrong entry {p2_name}, try once again!")
x2=None
for x2 in range(5):
f2="".join(frame[x2])
print(f2)
# Result check for p2
winningfunc()
frame=[[“”,“|”、“”、“|”、“”、,
["-","-","-","-","-"],
[" ","|"," ","|"," "],
["-","-","-","-","-"],
[" ","|"," ","|"," "]]
#名称分配
尽管如此:
p1_name=输入(“输入播放器1名称:”)
p2_name=输入(“输入玩家2名称:”)
如果p1_name.lower()==p2_name.lower():
打印(“输入的两个名称相同,请重新输入!”)
其他:
打破
#符号赋值
尽管如此:
p1_nt=input(f{p1_name},选择要播放的“X”或“O”:)
如果p1\u nt.lower()=“x”:
p1\u nt=“X”
p2\u nt=“O”
打印(f“{p1_name}将与'X'一起播放,{p2_name}将与'O'一起播放)
打破
elif p1\u nt.lower()=“o”:
p1\u nt=“O”
p2\u nt=“X”
打印(f“{p1\u name}将与'O'和{p2_name}一起播放'X')
打破
其他:
打印(“输入的符号错误,请重新输入!”)
#口述
dc={“1:[4,0],“2:[4,2],“3:[4,4],“4:[2,0],“5:[2,2],“6:[2,4],“7:[0,0],“8:[0,2],“9:[0,4]}
#获胜逻辑定义
flag=False
def winningfunc():
全球旗帜
def mf(v1、v2、v3):
全球旗帜
结果1=0
结果2=0
对于范围内的x(v1、v2、v3):
如果帧[dc[str(x)][0]][dc[st