我正在努力创造一个"选择你自己的冒险" Python中的风格游戏,其中用户插入与动作相对应的各种数字,这些动作将决定下一个故事的哪个部分。当用户插入一个无效的选项时,我没有试图使函数简化无穷无尽的if / else语句,但我遇到了困难。我有一个"步骤"变化并导致不同情况的变量,我的函数成功更改了步变量,但if / else语句不会触发。任何帮助将不胜感激!
step = 7
def stepchange():
global step
b = step
while step == b:
a = input()
if a == 1:
global step
step = b + .1
if a == 2:
global step
step = b + .2
if a ==3:
global step
step = b + .3
global step
if step == 7.1:
print("Step 7.1")
global step
if step == 7.2:
print("Step 7.2")
global step
if step ==7.3:
print("Step 7.3")
答案 0 :(得分:0)
您无法调用该函数,因此不会发生步骤更改。通话后,您可能仍会遇到以后的比较问题。 float
实际上是一个二进制小数,它以十进制的形式估算,但不完全相等。因此,例如,7.1
确实是7.099999999999999644728632119949907064437866210937500000
。由于您对这些数字进行了一些数学运算,您可能会发现舍入误差会导致它们略有不同,因此比较失败。
您可以删除额外不需要的global
语句并使用decimal
模块:
from decimal import Decimal
step = Decimal('7')
def stepchange():
global step
b = step
while step == b:
a = Decimal(input())
if a == 1:
step = b + Decimal('.1')
if a == 2:
step = b + Decimal('.2')
if a ==3:
step = b + Decimal('.3')
stepchange()
if step == Decimal('7.1'):
print("Step 7.1")
elif step == Decimal('7.2'):
print("Step 7.2")
if step == Decimal('7.3'):
print("Step 7.3")
我不确切知道应该采取什么步骤,但如果您正在考虑步骤加子步骤,列表可能是更好的选择:
step = [7, 0]
def stepchange():
global step
while True:
a = int(input())
if a in (1, 2, 3):
step[1] = a
break
stepchange()
if step == [7, 1]:
print("Step 7.1")
elif step == [7, 2]:
print("Step 7.2")
if step == [7, 3]:
print("Step 7.3")
答案 1 :(得分:0)
正如评论中所提到的,float
比较是棘手的。由于您正在输入文本,因此您可以继续使用文本。
step = "7"
def stepchange():
global step
b = step
a = input()
if a == "1":
step = b + ".1"
if a == "2":
step = b + ".2"
if a =="3":
step = b + ".3"
if step == "7.1":
print("Step 7.1")
elif step == "7.2":
print("Step 7.2")
elif step == "7.3":
print("Step 7.3")