首页 文章

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

提问于
浏览
-4

这是我猜猜游戏代码的一部分 . 我想计算一个玩家的猜测,然后将他们的名字和猜测数量附加到一个后来写入或附加到文件的列表中 . 截至目前,它只将游戏的最后一位玩家附加到列表和文件中,而不是所有玩家 . 我做错了什么?

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 回答

  • -1

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

    你想 open('highscore.txt', 'a') 追加,如https://docs.python.org/3/library/functions.html#open所述

    编辑:

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

    就目前而言,你循环多次,每次使 highscore 的长度为零,然后附加所以length为1,然后你排序一个条目(no-op),然后你写一个单行文件 . 它不是在试图写作,例如一个三行文件,通过交互和循环三次,或者通过三次单独调用bash程序(在这种情况下 'a' append是合适的) . 帮助我们,澄清代码和意图 .

    假设Alice和Bob正在玩 . 如果您打算每次再次播放时打算重写Alice的分数,也许您不想使用列表而是使用 name_to_score dict .

    您没有向我们展示 def choose 的内容,但我认为它提示是/否并返回True / False . 你没有向我们展示 def main 的内容,但我认为你不想在循环体中调用 main() ,因为 while choose(): 循环可能就足够了 . 试着读懂你的想法并不总是很好 . 更清楚地陈述您的问题将有助于我们提供更相关的答案 .

相关问题