用户输入被附加多次

2024-09-28 23:05:47 发布

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

我想将用户输入存储在一个列表中,根据该列表的长度,程序随后将做出决定

目前,用户输入被存储多次,每次用户给出一个输入,但只能追加一次

moves = int(input("Enter the number of moves: "))

throw00 = []
throw01 = []
throw10 = []
throw11 = []

player_move_dif = [] #create an empty list out of your for-loop

for i, turn in enumerate(range(moves)): #use enumerate() to count the loops
    if i >= 0: #first move has no previous one
        player_move_dif.append(input("Choose your move number %s (0 or 1):" % (turn+1)))
        player_move_2 = int(player_move_dif[i])
        player_previous_move = int(player_move_dif[i-1])
    else:
        player_move_dif.append(input("Choose your move number %s (0 or 1):" % (turn+1)))
        player_move_2 = int(player_move_dif[i])
        player_previous_move = int(player_move_dif[i-1])
        #continue
       
    for turn in range(moves): #store player moves in the respective lists    
        if player_move_2 == 0 and player_previous_move == 0:
            throw00.append(player_move_2)
        elif player_move_2 == 0 and player_previous_move == 1:
            throw01.append(player_move_2)
        elif player_move_2 == 1 and player_previous_move == 0:
            throw10.append(player_move_2)
        else:
            throw11.append(player_move_2)

因此,在5圈之后,列表(这里throw11)的大小是25,而不是5

enter image description here

我尝试了extend而不是append,但这给了我一个类型错误


Tags: the用户number列表inputyourmoveturn
3条回答

这将起作用,因为下面是错误

moves = int(input("Enter the number of moves: "))

throw00 = []
throw01 = []
throw10 = []
throw11 = []

player_move_dif = [] #create an empty list out of your for-loop

for i, turn in enumerate(range(moves)): #use enumerate() to count the loops
    if i >= 0: #first move has no previous one
        player_move_dif.append(input("Choose your move number %s (0 or 1):" % (turn+1)))
        player_move_2 = int(player_move_dif[i])
        player_previous_move = int(player_move_dif[i-1])
    else:
        player_move_dif.append(input("Choose your move number %s (0 or 1):" % (turn+1)))
        player_move_2 = int(player_move_dif[i])
        player_previous_move = int(player_move_dif[i-1])
        #continue
        
    #############################################################################
    """REMOVED THIS LINE OF CODE- for turn in range(moves): #store player moves in the respective lists  Because This Means That The Number Of Moves The Player Entered `append` the given input that number of times"""
    ################################################################################

    if player_move_2 == 0 and player_previous_move == 0:
        throw00.append(player_move_2)
    elif player_move_2 == 0 and player_previous_move == 1:
        throw01.append(player_move_2)
    else:
        throw11.append(player_move_2)



print(throw00)
print(throw01)
print(throw10)
print(throw11)
moves = int(input("Enter the number of moves: "))

throw00 = []
throw01 = []
throw10 = []
throw11 = []

player_move_dif = [] #create an empty list out of your for-loop

for i, turn in enumerate(range(moves)): #use enumerate() to count the loops
    print(i,turn,'\n')
    if i >= 0: #first move has no previous one
        player_move_dif.append(input("Choose your move number %s (0 or 1):" % (turn+1)))
        player_move_2 = int(player_move_dif[i])
        player_previous_move = int(player_move_dif[i-1])
    else:
        player_move_dif.append(input("Choose your move number %s (0 or 1):" % (turn+1)))
        player_move_2 = int(player_move_dif[i])
        player_previous_move = int(player_move_dif[i-1])
        #continue
       
    if player_move_2 == 0 and player_previous_move == 0:
        throw00.append(player_move_2)
    elif player_move_2 == 0 and player_previous_move == 1:
        throw01.append(player_move_2)
    elif player_move_2 == 1 and player_previous_move == 0:
        throw10.append(player_move_2)
    else:
        throw11.append(player_move_2)

我刚刚从代码中删除了内部for循环

for turn in range(moves): #store player moves in the respective lists 

与嵌套循环相比,您做的工作太多,问题也很多

允许玩家选择0或1的线被移动到循环的顶部,并且在任何条件之外(它所属的位置)。我删除了不必要的enumerate、所有不必要的条件、冗长的变量名和不必要的嵌套for循环。最后的条件都被dict替换

moves = int(input("Enter the number of moves: "))

throw = {
    '00':[],
    '01':[],
    '10':[],
    '11':[]
}

move_diff = []

for i in range(moves): #enumerate is entirely unnecessary
    move_diff.append(input(f'Choose your move number {i+1} (0 or 1):'))
    
    if i >= 0:
        pm  = int(move_diff[i])
        ppm = int(move_diff[i-1])

        #conditions aren't necessary if you simply concoct a key
        throw[f'{pm}{ppm}'].append(pm) 
        
#I chose 4 moves and 1 on every move      
print(throw) #{'00': [], '01': [], '10': [], '11': [1, 1, 1, 1]}

家庭作业

  1. 确保用户输入至少2个移动,如果少于2个,则进行处理
  2. 如果用户未输入1或0,则处理
  3. 为整个游戏创建一个游戏循环

相关问题 更多 >