【问题标题】:Stopping a while loop based on length of dictionary keys根据字典键的长度停止while循环
【发布时间】:2019-09-04 18:41:05
【问题描述】:

目前正在处理我的任务的一个问题,我面临一些挫折。该问题旨在模拟玩家之间的骰子游戏。已经解决了大部分问题,但遇到了一个我一开始没有模拟的意外问题。

玩家的名字存储在字典中,所以键是每个玩家的名字。必须至少有 3 名玩家,最多 5 名玩家。 首先获取 3 到 5 名玩家的姓名。玩家的名字必须是唯一的。如果用户在记录 3 个玩家之前击中,则会显示错误消息。如果有重复的名字,将显示错误消息如果用户在玩家人数为 3 或 4 时点击,游戏将开始。如果玩家人数为 5 人,游戏将自动开始,无需进一步提示输入玩家姓名。

一直在使用 While 循环,因为必须连续显示错误消息,直到输入正确的玩家人数达到最低要求。

players = {}
while True:
    name = input("Enter player's name, <Enter> to end: ")
    x = len(players.keys()) #count number of players
    if name in players.keys(): #error for when names exits
        print("Name already exists, try again.")
    if x < 3 and name == "": #for when user keys <Enter> when number players less than 3
        print(f"Minimum 3 players please, currently only {x} players!")
        continue
    elif x == 5: #when number players is 5
        break
    elif x >= 3 and x < 5 and name == "": #when number players is 3 or 4 and user hits <Enter>
        break
    else:
        players[name] = [[],2] #first list dice value, second is points
print(f"{x} players playing.")
return players

字典的记录工作正常,最多只能捕获 5 个名字。问题是在我成功输入第五个名字后,While 循环将再次运行,提示另一个输入,然后才满足 5 个玩家的中断条件。

【问题讨论】:

    标签: python-3.x


    【解决方案1】:

    您需要稍微重新排序您的代码:

    players = {}
    while True:
        name = input("Enter player's name, <Enter> to end: ")
    
        if name in players.keys(): #error for when names exits
            print("Name already exists, try again.")
        else:
            players[name] = [[],2] #first list dice value, second is points
    
        x = len(players.keys())  # count number of players
    
        if x < 3 and name == "": #for when user keys <Enter> when number players less than 3
            print(f"Minimum 3 players please, currently only {x} players!")
            continue
        elif x == 5: #when number players is 5
            break
    
    
    print(f"{x} players playing.")
    print (players)
    

    【讨论】:

    • 哦,对了,我没想到。非常感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-14
    • 2010-09-26
    • 2013-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多