当main循环时,我的程序仅将一个用户输入附加到列表中

时间:2018-12-09 09:51:01

标签: python python-3.x

这是我的猜谜游戏代码的一部分。我想计算一个球员的猜想,然后将他们的名字和猜想数附加到一个列表中,该列表随后写入或附加到文件中。截至目前,它仅将游戏的最后一个玩家(而不是所有玩家)添加到列表和文件中。我该怎么办?

from typing import List, Tuple
def choose:
'"code""""""




guesses = 0

while choose(): 
    guesses += 1 
    pass

    name = input('What is your name?:')

    highscore: List[Tuple[str, int]] = []
    highscore.append((name, guesses))

    sorting_by_second = sorted(highscore, key=lambda X: X[1])

    with open('highscore.txt', 'w') as f:
        for name, guesses in sorting_by_second:
           f.write(f'{name} guess {guesses}.\n')


    new_player = input('New player?(yes/no:').lower()
    if new_player == 'yes':
      main()

    else:
        break


main()

1 个答案:

答案 0 :(得分:-1)

'w'模式将覆盖highscore.txt。可以将其视为删除文件,然后重新创建。

您要附加open('highscore.txt', 'a'),如https://docs.python.org/3/library/functions.html#open

所述

编辑:

或者,您是否想将highscore初始化为循环 之外的空列表? (您的问题尚不清楚。用有效的python代码替换当前代码,并显示所需的文件输出示例会很有帮助。)

就目前而言,您循环多次,每次使highscore的长度为零,然后附加长度为1,然后对单个条目进行排序(无操作),然后编写一个-线文件。目前尚不清楚您是否尝试编写例如通过交互和循环三次,或通过分别从bash调用程序三个不同的时间来创建一个三行文件(在这种情况下,附加'a'是适当的)。帮助我们,并阐明代码和您的意图。

假设爱丽丝和鲍勃在玩。如果您打算每次爱丽丝(Alice)再次演奏时都覆盖其得分,则可能更愿意使用name_to_score字典而不是列表。

您没有向我们显示def choose的内容,但是我认为它提示是/否并返回True / False。您没有向我们展示def main的内容,但是我假设您不想在循环体中调用main(),因为while choose():循环可能就足够了。试图读懂自己的想法并不总是很奏效。更清楚地说明您的问题将有助于我们提供更多相关的答案。