基于用户输入的if语句给出了意外的输出

时间:2019-09-21 08:21:18

标签: python if-statement input

我正在制作一个基于文本的小游戏来练习我的python技能。我正在努力获取if语句,以根据用户输入的内容显示正确的结果。

weapon_choice = str(input("You can choose between three weapons to defeat the beast!"
                   " Press 1 for Axe, 2 for Crossbow, 3 for Sword."))

if input(1):
    print("You chose the Axe of Might")
elif input(2):
    print("You chose the Sacred Crossbow")
else:
    print("You chose the Elven Sword")

我希望输出会问我一个数字(1、2或3),然后打印与该数字关联的字符串。相反,当我输入1时,无论我键入什么数字,它都会先输出1,然后输出2,然后输出与数字3相关联的字符串(“ else”选项)。我不明白为什么?

Greetings, weary wanderer.
Welcome to Freyjaberg. Choose your weapon.
You can choose between three weapons to defeat the beast! Press 1 for Axe, 2 for Crossbow, 3 for Sword.1
1
2
You chose the Elven Sword

Process finished with exit code 0

5 个答案:

答案 0 :(得分:1)

尝试一下:

weapon_choice = input("You can choose between three weapons to defeat the beast!\nPress 1 for Axe, 2 for Crossbow, 3 for Sword.\n")

if weapon_choice=='1':
    print("You chose the Axe of Might")
elif weapon_choice=='2':
    print("You chose the Sacred Crossbow")
else:
    print("You chose the Elven Sword")

注意:

  1. weapon_choice无需强制转换为str格式,因为input()已经采用字符串格式。
  2. 无论何时执行input(1)input(2),它基本上都会提示用户提供其他输入,而不是检查条件。

输出:

michael@arkistarvh:/$ python text_game.py 
You can choose between three weapons to defeat the beast! Press 1 for Axe, 2 for Crossbow, 3 for Sword.
3
You chose the Elven Sword

答案 1 :(得分:1)

您应该改为:

weapon_choice = input("You can choose between three weapons to defeat the beast! \n " +  " Press 1 for Axe, 2 for Crossbow, 3 for Sword.")

if weapon_choice == '1':
    print("You chose the Axe of Might")
elif weapon_choice == '2':
    print("You chose the Sacred Crossbow")
elif weapon_choice == '3':
    print("You chose the Elven Sword")
else:
    print("Invalid input selected")

这样做的原因是input(..)导致字符串被解析,因此str(..)周围不需要input(..)。此外,您应该具有传递无效输入的条件,以便将错误的根本原因更清楚地通知用户。

(请注意\n表示新行的开始)

答案 2 :(得分:1)

那不是输入在Python中的工作方式。

您正确地假设input(“ some text”)将在第一行上打印该文本(并将结果存储在变量robot_choice中),那么为什么您认为input(number)将返回一个布尔值告诉您输入的是那个数字吗?

相反,它的作用是再次打印数字并返回一个空字符串(因为您可能只是按Enter键),因此前两个ifs为False且程序进入else时,打印“ Invalid input selected”。

第一次输入的结果将存储在武器选择中,因此您应该对该变量进行比较。

答案 3 :(得分:0)

if input(1)使用参数input调用1函数,然后使用响应来测试是否在其块中执行代码。由于执行input只是将其参数输出到终端,并返回用户输入的任何内容作为响应,因此您的程序的行为与代码所暗示的完全相同。

由于您已经将用户对第一个问题的回答存储在名为weapon_choice的变量中,因此应将if input(1)替换为if weapon_choice == '1'-其他变量也应相同。

答案 4 :(得分:0)

您可以尝试此脚本

weapon_choice = str(input("You can choose between three weapons to defeat the beast!"
                   " Press 1 for Axe, 2 for Crossbow, 3 for Sword."))
if weapon_choice == '1':
    print("You chose the Axe of Might")
elif weapon_choice == '2':
    print("You chose the Sacred Crossbow")
else:
    print("You chose the Elven Sword")