- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我需要一些帮助来完成我正在尝试完成的这个程序。这件事有点乱。这是一天 12 小时的结束,它将于今晚到期,我认为此时我只是让事情变得更糟。我正在努力为 player_choice 实现输入“4”并让程序只说“退出程序”并停止。当前,当我输入一个选项时,我得到了我认为是无限循环的结果,因为整个 IDE 锁定并崩溃了。
项目要求:
1) Get and return the value of the computer’s choice as an integer.
2) Use a menu to get, validate, and return the player’s choices.
The player will enter their menu choice for rock, paper, scissors, or quit.
Validate the choice before returning it.
3) Determine the winner. There are a total of 9 possible combinations of
computer and player choices. The menu should always be displayed after the outcome has
been displayed regardless of the outcome
(i.e. ties should be treated the same as any other outcome).
4) After the player chooses to stop playing, display the total number of
games that ended in a tie, the total number the computer won, and the total
number the player won.
程序代码如下:
import random
def main():
display_menu()
print('There were', number_of_tied_games, 'tie games played.')
print('The computer won', number_of_computer_games, 'game(s).')
print('You won', number_of_player_games, 'game(s).')
def process_computer_choice():
choice1 = random.randint(1,3)
return choice1
def process_player_choice():
print('What is your choice?')
choice2 = (input())
while choice2 != "1" and choice2 != "2" and choice2 != "3" and choice2 != "4":
print("ERROR: the choice can only be 1, 2, 3, or 4.")
choice2 = (input("Please enter a correct choice: "))
return choice2
def determine_winner(player_choice, computer_choice, choice2):
while choice2 != "4":
if computer_choice == 1:
if player_choice == "2":
print('Paper covers rock. You win!')
winner = 'player'
elif player_choice == "3":
print("Rock crushes scissors. The computer wins!")
winner = 'computer'
else:
print('The game is tied. Try again.')
winner = 'tied'
if computer_choice == 2:
if player_choice == "1":
print('Paper covers rock. The computer wins!')
winner = 'computer'
elif player_choice == "3":
print("Scissors cuts paper. You win!")
winner = 'player'
else:
print('The game is tied. Try again.')
winner = 'tied'
if computer_choice == 3:
if player_choice == "1":
print('Rock smashes scissors. You win!')
winner = 'player'
elif player_choice == "2":
print("Scissors cuts paper. The computer wins!")
winner = 'computer'
else:
print('The game is tied. Try again.')
winner = 'tied'
return winner
def display_menu():
choice2 = 0
number_of_tied_games = 0
number_of_player_games = 0
number_of_computer_games = 0
print(' MENU')
print('1) Rock')
print('2) Paper')
print('3) Scissors')
print('4) Quit')
print("Let's play the game of Rock, Paper, Scissors.")
computer_choice = process_computer_choice()
player_choice = process_player_choice()
while choice2 != "4":
if computer_choice == 1:
print('The computer chooses rock.')
elif computer_choice == 2:
print('The computer chooses paper.')
else:
print('The computer chooses scissors.')
#display player choice
if player_choice == "1":
print('You choose rock.')
elif player_choice == "2":
print('You choose paper.')
else:
print('You choose scissors.')
result = determine_winner(player_choice, computer_choice, choice2)
if result == 'computer':
number_of_computer_games += 1
elif result == 'player':
number_of_player_games += 1
else:
number_of_tied_games += 1
print
main()
最佳答案
您的程序将无限运行,因为您没有更新 display_menu()
函数内的变量 choice2
。你在做什么:
choice2 = 0
while choice2 != "4":
# your code
result = determine_winner(player_choice, computer_choice, choice2)
因此,最终 choice2
始终为 0,并且您的 while 循环一直在无休止地运行。
编辑:您正在从 process_player_choice()
返回一个值,并将该值分配给 display_menu( )
函数。
player_choice = process_player_choice()
我猜你应该将返回值赋给变量choice2
,这样当用户输入4
时,程序就会终止。
choice2 = process_player_choice()
请注意,您在 determine_winner()
中有另一个 while 循环,由于 choice2
,它也会无限运行。我相信不需要 while 循环,因为 display_menu()
函数中已经有一个 while 循环。
所以,简而言之,您实际上不需要额外的变量 player_choice
,您只需要一个变量来存储用户选择并可以传递给所需的函数来执行它们的操作。您还应该从 display_menu()
函数中省略 while 循环。
最后,正如@AdrianoMartins 在他的回答中提到的,您在 display_menu()
中声明的以下变量应该是全局的,否则您将无法从 main( )
函数。
number_of_tied_games = 0
number_of_player_games = 0
number_of_computer_games = 0
您可以在全局范围内声明它们,然后在 display_menu()
中将它们声明为全局以修改它们的值。例如:
// declaring globally
tied_games = 0
player_games = 0
computer_games = 0
def display_menu():
// need to modify global copy of the variables
global tied_games
global player_games
global computer_games
要了解更多信息,我鼓励您查看此 SO post .
关于python - 在某处陷入无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41133010/
我是 JavaFx 新手,正在尝试编写我的刽子手游戏。我现在必须检查保存我的词典的文件是否在那里。如果没有,请用户输入其位置。我试图在弹出窗口中执行此操作,要求用户输入位置并点击按钮,该按钮反过来将导
我卡住了。我试图用 SQLite 表的字段填充 ListView 。我对 Android 编程很陌生。关于我为什么会收到此错误的任何建议: 10-24 10:24:31.154: ERROR/Andr
我正在编写一个 java 程序,它接受用户输入的数字 x,对从 1 到 x(包括 x)的所有可被 3 整除的数字求和,并显示总和。它编译没有错误但是当我执行程序时,它陷入循环并继续执行直到我关闭命令提
JS 和 Web 编程新手。 我有一个图像在 Canvas 上沿水平轴移动。当图像到达某个点时,我希望它停止、缩放然后旋转。我使用的方法会导致无限循环,我不明白为什么。 这是被调用的方法 while
我制作了一个使用表单、php 和 javascript 进行登录和注销的页面。 但唯一的问题是,当您提交表单并且数据发生更改时,直到页面重新加载后才会更新。 注意lo
我在查询时陷入困境。我想根据“时间和点赞数”查询帖子,但不知道如何在 firebase 上查询。示例: Query mquery =FireBaseDatabase() getReference().
这个问题已经有答案了: Why does my ArrayList contain N copies of the last item added to the list? (5 个回答) 已关闭 6
所以,我有一个项目,任务是这样表述的: 您需要创建一个名为 Candidate 的类,它存储参加选举的人的姓氏以及他们获得的票数。您还应该有访问每个字段的方法。此时,这些字段不需要修改器,因为它们不应
我正在解决 Java 编程类(class)中的作业问题,但我陷入了困境。我会预先告诉你,我绝不是专家,并且对 Java 或一般编程了解不多。 我遇到的问题实际上不是我的作业问题,而是书中的一个例子,我
我正在用java编写一个客户端程序。服务器是用C++编写的。当我从以下位置发送消息时客户端到服务器就可以了。但是在接收过程中我的客户端线程陷入了这个调用 in = new BufferedReader
我正在参加 Edx 上的在线类(class) cs50,我有一个作业,其中我必须创建一个程序,用户在其中输入关键字(然后用于加密)和需要在 Vigenere 中加密的字符串。密码。 Vigenere
我遇到了陷入 getIntLimited 函数的问题。在调整数量中,我需要它检查用户是否输入了正确的数字,而不是多于或少于所需的数字,而不是字母。我没有对“库存”选项这样做,只在“检查”选项中这样做。
我更喜欢创建一个 Dictionary 对象并向其中添加 3 个单词。我的程序没有编译错误,但在第二个 for 循环中出现运行时错误,问题出在 addNewWord 函数中吗?我需要传递一个指向 Di
该程序的要点是获取 2 个文件,一个是字典,另一个是文本,创建一个输出文件,并将文本文件中的所有单词放入其中,但将文本文件中不存在的单词大写字典。 当我运行程序时,它不断要求输入,所以看起来我陷入了
我正在为我的 C++ 类(class)做作业。在这个作业中,我需要编写一个程序,从 cin 中读取数字,然后对它们求和,当使用 while 循环输入 0 时停止。 我已经编写了代码并获得了我需要的结果
这是我到目前为止所得到的- $awards_sql_1 = mysql_query('SELECT * FROM categories WHERE section_id = 1') or die(my
我想弄清楚某个步骤何时发生。所以我编写了一个名为 countSteps 的方法来执行此操作。它的问题是我陷入其中,因为在 while 循环中我不断获取新数据,而且我认为它永远不会返回到 onSenso
我有点卡在一个问题上了。我有一个 Spring + Hibernate 应用程序,最近几天表现得很奇怪。 通常,即使在 Debug模式下,它也会引导大约 15 秒。 几天后,在没有显示任何重大错误或问
我是编程新手,我想知道是否有人可以帮助我解决这个问题?它似乎处于连续循环中,我一直在更改它并尝试不同的方法近一个小时,将不胜感激。 #include "stdafx.h" #include
我正在用 Python 创建一个聊天服务器,并且对这门语言的了解还很浅。我现在有 1 个问题,我想在进一步解决之前解决,但我似乎找不到解决问题的方法。 这是一个持续的 while 循环.. 下面的代码
我是一名优秀的程序员,十分优秀!