【问题标题】:i can't add items to a list inside the while loop我无法将项目添加到 while 循环内的列表
【发布时间】:2023-02-23 04:55:18
【问题描述】:
lis=[]

    while True:
        cho=["rock","paper","scissors"]
        us_in=input("rock, paper or scissors:\n")
        co_in=random.choice(cho)
    
        if us_in==co_in:
            res="draw"
        elif us_in=="rock":
            if co_in=="paper":
                res="lost"
            elif co_in=="scissors":
                res="win"
        elif us_in=="paper":
            if co_in=="scissors":
                res="lost"
            elif co_in=="rock":
                res="win"
        elif us_in=="scissors":
            if co_in=="rock":
                res="lost"
            elif co_in=="paper":
                res="win"
        elif us_in=="done":
            break
        
        else:
            print("wrong input")
            continue
    
    
        lis.append(res)
        #print(lis)
    print(lis)

首先我在循环中创建了一个列表但是它没有工作(因为它在每个 循环,对吧?)。但是,将列表从循环中取出并没有解决问题。我应该怎么办?

【问题讨论】:

  • 除了开始时的缩进问题外,这段代码对我来说工作正常。它在最后打印列表,并且包含预期的内容。问题是什么?你为什么用basic标记这个?你读过标签描述了吗?
  • 在修复缩进并添加 import random 之后,也适用于我。当您运行您的代码时会发生什么?您期望发生什么?有什么错误吗?另见How to Ask

标签: python python-3.x while-loop basic


【解决方案1】:

看起来您提供的代码应该可以将项目添加到 while 循环内的列表 lis 中。但是,有一个可能的问题可能会导致您遇到的问题。

代码可能会引发您没有看到的异常,这可能会导致程序过早退出循环并阻止更新列表。诊断此问题的一种可能方法是在更新列表的代码周围添加一个 try-except 块:

while True:
    try:
        cho=["rock","paper","scissors"]
        us_in=input("rock, paper or scissors:
")
        co_in=random.choice(cho)
    
        if us_in==co_in:
            res="draw"
        elif us_in=="rock":
            if co_in=="paper":
                res="lost"
            elif co_in=="scissors":
                res="win"
        elif us_in=="paper":
            if co_in=="scissors":
                res="lost"
            elif co_in=="rock":
                res="win"
        elif us_in=="scissors":
            if co_in=="rock":
                res="lost"
            elif co_in=="paper":
                res="win"
        elif us_in=="done":
            break
        else:
            print("wrong input")
            continue
    
        lis.append(res)
        print(lis)
    except Exception as e:
        print(f"An error occurred: {e}")

这将捕获可能引发的任何异常并打印一条错误消息,这可以帮助您诊断问题。

另一个可能的问题是循环无限期地运行并且不允许您输入任何内容。在这种情况下,您可以尝试在用户输入之前添加打印语句以确保程序正在运行:

while True:
    print("loop is running...")
    cho=["rock","paper","scissors"]
    us_in=input("rock, paper or scissors:
")
    co_in=random.choice(cho)

    # rest of the code...

这将在每次循环运行时打印一条消息,这可以帮助您查看程序是否仍在运行。如果您没有看到此消息,则循环可能被某些其他代码或问题阻止。

【讨论】:

  • 一个未捕获的异常不会吵闹地终止程序吗?
【解决方案2】:

你的代码对我来说工作得很好。

%Run test.py
rock, paper or scissors:
rock
['draw']
rock, paper or scissors:
paper
['draw', 'lost']
rock, paper or scissors:
paper
['draw', 'lost', 'lost']
rock, paper or scissors:
paper
['draw', 'lost', 'lost', 'win']
rock, paper or scissors:
test
wrong input
rock, paper or scissors:
scissors
['draw', 'lost', 'lost', 'win', 'lost']
rock, paper or scissors:
rock
['draw', 'lost', 'lost', 'win', 'lost', 'win']
rock, paper or scissors:
done
['draw', 'lost', 'lost', 'win', 'lost', 'win']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多