为什么 KeyboardInterrupt 不输出 if-else 循环?

如何解决为什么 KeyboardInterrupt 不输出 if-else 循环?

所以我有一个我想制作的小游戏的代码,但是带有键盘中断的输出不起作用。我是 python 的菜鸟,所以我愿意接受任何建议来修复我的代码

代码

"""
GAME
number 1-20 rapidly listing
if press Ctrl+C on 10,then win
if not,then lose and restart
"""

import time

print("Type Ctrl+C to stop")
print("If you land on 10,you win!")
time.sleep(2)
i_dict = {1: 14,2: 13,4: 11}
dict_num = 0
while True:

    try:
        for i in range(1,21):
            print(i)
            time.sleep(0.07)
    except KeyboardInterrupt:
        i_dict[dict_num + 1] = i
        if i == 10:
            print("You Win! Nice Job!")
        else:
            print(f"You landed on {i}!")
        scores = input("Would you like to see your past scores?").lower()
        if scores == 'yes':
            for num,score in i_dict.items():
                print(f"{num}: {score}")
        restart = input("Would you like to try again? Answer with Yes or No: ").lower()
        if restart == 'yes':
            break

当我按下 Cntrl+C 时输出

----------FINISHED----------
exit code: 2 status: 0

解决方法

因此,我没有使用键盘中断作为导入,而是将其切换为使用键盘模块,如果您还没有安装它,请通过执行 pip install keyboardpip3 install keyboard(如果您正在运行 linux)来安装它可能必须以 sudo 的身份运行 python,如果你不在 linux 上,请不要担心。 这是稍微改进的代码。快乐编码!

import keyboard
import time
print('Hit "F" to stop. ')
print("If you land on 10,you win!")
time.sleep(2)
print("Start!")
i_dict = {1: 14,2: 13,4: 11}
dict_num = 0
i = 0
while True:
    if i != 21:
        print(i)
        time.sleep(0.07)
        i += 1
        if keyboard.is_pressed("f"):
            i_dict[dict_num + 1] = i
            if i == 10:
                print("You Win! Nice Job!")
            if i != 10:
                print(f"You landed on {i}!")
            i = 0
            restart = input("Would you like to try again? Answer with Yes or No: ")
            if restart.lower() == 'yes':
                i = 0
            elif restart.lower() == 'no':
                print("Thanks for playing")
                exit()
    if i >= 21:
        i = 0
   

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?