Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当main循环时,我的程序只在列表中添加一个用户输入_Python_Python 3.x - Fatal编程技术网

Python 当main循环时,我的程序只在列表中添加一个用户输入

Python 当main循环时,我的程序只在列表中添加一个用户输入,python,python-3.x,Python,Python 3.x,这是我的猜谜游戏代码的一部分。我想计算一个玩家的猜测,然后将他们的名字和猜测次数附加到一个列表中,该列表稍后会写入或附加到文件中。到目前为止,它只将游戏的最后一个玩家添加到列表和文件中,而不是所有玩家。我做错了什么 from typing import List, Tuple def choose: '"code"""""" guesses = 0 while choose(): guesses += 1 pass name = input('What i

这是我的猜谜游戏代码的一部分。我想计算一个玩家的猜测,然后将他们的名字和猜测次数附加到一个列表中,该列表稍后会写入或附加到文件中。到目前为止,它只将游戏的最后一个玩家添加到列表和文件中,而不是所有玩家。我做错了什么

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()

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

您希望
open('highscore.txt','a')
追加,如中所述

编辑:

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

目前,您循环了很多次,每次都将
highscore
的长度设为零,然后追加长度为1,然后对单个条目进行排序(无操作),然后编写一行文件。不清楚您是通过交互和循环三次来编写一个三行文件,还是通过从bash分别调用程序三次(在这种情况下,
'a'
append是合适的)。帮助我们,并澄清代码和您的意图

假设爱丽丝和鲍勃在玩。如果你想在Alice每次重放时覆盖她的分数,也许你更喜欢使用
名字\u to \u分数
口述,而不是列表


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

每次循环结束时,您都会在追加之前创建一个新的空列表。@cdarke哦,我明白了!那么我应该怎么做才能不创建一个空列表呢?将highscore:List[Tuple[str,int]]=[]放在“else”下?我不理解代码的逻辑,但我会在choose()时考虑
。您可能需要在
中将其重置为空,否则
@cdarke我现在更改了问题中的代码。每次用户玩游戏时,我都希望程序在高分列表中添加名称和猜测次数,然后将其打印到.txt文件中。“代码”是怎么回事“def后面的行?这看起来不像是有效的Python代码。如果您每次都写出整个列表,那么覆盖旧文件正是您想要的。