Python:函数随机创建变量。如果它已经存在,它将重新运行函数以获取新的

2024-09-29 23:31:38 发布

您现在位置:Python中文网/ 问答频道 /正文

然后将变量设置为列表中的变量,并返回该列表

我只能在函数没有多次运行的情况下获取返回的值

关于我可能做错了什么有什么提示吗

def randPlaceComputerSubmarine():
    count = 0
    stopPlacement = False
    print("Placing Computer Submarine")
    PC_subV1 = 0
    PC_subH1 = 0
    PC_subV2 = 0
    PC_subH2 = 0
    PC_subV3 = 0
    PC_subH3 = 0

    C_dir = randint(1,2)
    if C_dir == 1:
        C_dir = "ns"
    else:
        C_dir = "ew"


    if C_dir == 'ew':
        C_subH = randint(0,7)
        C_subV = randint(0,9)

        PC_subH1 = C_subH + 0
        PC_subH2 = C_subH + 1
        PC_subH3 = C_subH + 2

        PC_subV1 = C_subV
        PC_subV2 = C_subV
        PC_subV3 = C_subV



    if C_dir == 'ns':
        C_subH = randint(0,9)
        C_subV = randint(0,7)
        PC_subH1 = C_subH
        PC_subH2 = C_subH
        PC_subH3 = C_subH

        PC_subV1 = C_subV
        PC_subV2 = C_subV + 1
        PC_subV3 = C_subV + 2
    print("C_subV1, C_subH1 = ",PC_subV1,",",PC_subH1)
    print("C_subV2, C_subH2 = ",PC_subV2,",",PC_subH2)
    print("C_subV3, C_subH3 = ",PC_subV3,",",PC_subH3)  

    if grid[PC_subV1][PC_subH1] == "*":
        print("Ship already placed there.(1) Select another position.")
        stopPlacement = True
        C_Submarine = []
        randPlaceComputerSubmarine()

    elif grid[PC_subV2][PC_subH2] == "*":
        print("Ship already placed there.(2) Select another position.")
        stopPlacement = True
        C_Submarine = []
        randPlaceComputerSubmarine()

    elif grid[PC_subV3][PC_subH3] == "*":
        print("Ship already placed there.(3) Select another position.")
        stopPlacement = True
        C_Submairine = []
        randPlaceComputerSubmarine()


# if (grid[C_subV1][C_subH1] == "*") or (grid[C_subV2][C_subH2] == "*") or (grid[C_subV3][C_subH3] == "*"):
#       randPlaceComputerSubmarine(grid)   
#   else:
#   if stopPlacement == False:
    while (stopPlacement == False) and (count <1):
        C_Submarine = []
        count= count + 1

        C_subV1 = PC_subV1
        C_subH1 = PC_subH1
        C_subV2 = PC_subV2
        C_subH2 = PC_subH2
        C_subV3 = PC_subV3
        C_subH3 = PC_subH3

        grid[C_subV1][C_subH1] = "*"
        grid[C_subV2][C_subH2] = "*"
        grid[C_subV3][C_subH3] = "*"

        print(C_subV1)
        print(C_subH1)
        print(C_subV2)
        print(C_subH2)
        print(C_subV3)
        print(C_subH3)


        C_Submarine = [C_subV1, C_subH1, C_subV2, C_subH2, C_subV3, C_subH3]
        print (C_Submarine)
        return C_Submarine

程序输出

C_bsV1, C_bsH1 =  8 , 1 
C_bsV2, C_bsH2 =  8 , 2 
C_bsV3, C_bsH3 =  8 , 3 
C_bsV4, C_bsH4 =  8 , 4 
C_bsV5, C_bsH5 =  8 , 5 
Place Aircraft Carrier 
Place sub 
place destroyer 
Place Cruiser 
Placing Computer Aircraft Carrier 
C_acV1, C_acH1 =  6 , 4 
C_acV2, C_acH2 =  6 , 5 
C_acV3, C_acH3 =  6 , 6 
C_acV4, C_acH4 =  6 , 7 
6 
4 
6 
5 
6 
6 
6 
7 
[6, 4, 6, 5, 6, 6, 6, 7] 
Placing Computer Submarine 
C_subV1, C_subH1 =  6 , 7 
C_subV2, C_subH2 =  7 , 7 
C_subV3, C_subH3 =  8 , 7 
Ship already placed there.(1) Select another position. 
Placing Computer Submarine 
C_subV1, C_subH1 =  8 , 7 
C_subV2, C_subH2 =  8 , 8 
C_subV3, C_subH3 = 8 , 9 
8 
7 
8 
8 
8 
9 
[8, 7, 8, 8, 8, 9] 
Traceback (most recent call last):   
File "/Users/JLach/Desktop/Battleship10.py", line 1607, in <module>
        main(grid)   File "/Users/JLach/Desktop/Battleship10.py", line 187, in main
        getUserInput(grid)   File "/Users/JLach/Desktop/Battleship10.py", line 1211, in getUserInput
        C_subV1, C_subH1, C_subV2, C_subH2, C_subV3, C_subH3 = randPlaceComputerSubmarine() TypeError: 'NoneType' object is not iterable
    >>>

Tags: dirgridprintpcsubmarinesubv3subv2subh2
2条回答
if grid[PC_subV1][PC_subH1] == "*":
    print("Ship already placed there.(1) Select another position.")
    stopPlacement = True
    C_Submarine = []
    randPlaceComputerSubmarine()

看起来您希望上述randPlaceComputerSubmarine调用的结果由第一个randPlaceComputerSubmarine调用返回。如果是这样,您需要显式返回它

    return randPlaceComputerSubmarine()

当你再次出现时,你就不会再回来了。我怀疑如果你把randPlaceComputerSubmarine()改成return randPlaceComputerSubmarine(),你会得到正确的结果。当您只调用函数时,您并没有对结果做任何处理,即使您调用的函数返回了某些内容,您也不会使用当前代码在函数的原始实例中返回它

相关问题 更多 >

    热门问题