简体   繁体   English

为什么我的变量显示为“未定义”?

[英]Why is my variable showing as “not defined”?

I have made an input variable as a number but only if the number 2 is inputted, it shows this:我已将输入变量设为数字,但仅当输入数字 2 时,它才会显示:

  line 35, in <module>
    if num_b == legal_num:
NameError: name 'num_b' is not defined"

I am not sure why it shows this.我不确定为什么它会显示这一点。

print ("This is the popular 60's game Nim")
print ("The aim of the game is for you to get to zero")

nim_rules = ("Rules:", "The human always gets the luxury to start", "You can only take away 1, 2, or 3 in 1 turn", "As you know, the person who gets to zero wins")
 
for rules in nim_rules:
     print (rules)

num_a = input ("Type your number: 1, 2, 3: ")
num_a = int(num_a);

legal_numbers = [1, 2, 3]
for legal_num in legal_numbers:

     if num_a == legal_num:
          C_num_a = 4 - num_a
          print (f" I take away {C_num_a}")
          num_b = input ("The number 8 is left. Choose your next number: ")
          num_b = int(num_b);

     if num_b == legal_num:
          C_num_b = 4 - num_b
          print (f"I take away {C_num_b}")
          num_c = input ("The number 4 is left. Choose your next number: ")
          num_c = int(num_c);
     
     if num_c == legal_num:
          C_num_c = 4 - num_c
          print (f"I take away {C_num_c}")
          print ("I win. Please Try again - You might win next time!")

else:
     print ("Is that the number 1, 2, or 3? Try again. ")

您只定义num_bnum_a == legal_num

You have only defined a variable "num_a" in this snippet as global var:您在此代码段中仅将变量“num_a”定义为全局变量:

num_a = input ("Type your number: 1, 2, 3: ")
num_a = int(num_a);

While num_b and num_c are defined with local scope within if condition.num_bnum_c是在 if 条件下用局部范围定义的。

You need to define these variables globally.您需要全局定义这些变量。

num_a = input ("Type your number: 1, 2, 3: ")
num_a = int(num_a);

num_b = None;
num_c = None;
for legal_num in legal_numbers:

   if num_a == legal_num:
      C_num_a = 4 - num_a
      print (f" I take away {C_num_a}")
      num_b = input ("The number 8 is left. Choose your next number: ")
      num_b = int(num_b);
   ..........

您只需num_b初始化变量num_bnum_c

The way your program has been define, num_b and num_c will be defined only if num_a == legal_name你的程序被定义的方式,num_b 和 num_c 只有在num_a == legal_name才会被定义

You may want to revisit your if statement implementation.您可能需要重新访问 if 语句实现。

Do you want to left indent the num_b and num_c input statements?你想左缩进num_bnum_c输入语句吗?

To help you, i have added a comment before those statements.为了帮助您,我在这些陈述之前添加了评论。

Your code below.您的代码如下。 I have added comments using #我使用 # 添加了评论

num_a = input ("Type your number: 1, 2, 3: ")
num_a = int(num_a);

legal_numbers = [1, 2, 3]
for legal_num in legal_numbers:

     if num_a == legal_num:
          C_num_a = 4 - num_a
          print (f" I take away {C_num_a}")

          #should the next two lines be left intend or go outside the for loop

          num_b = input ("The number 8 is left. Choose your next number: ")
          num_b = int(num_b);

     if num_b == legal_num:
          C_num_b = 4 - num_b
          print (f"I take away {C_num_b}")

          #should the next two lines be left intend or go outside the for loop

          num_c = input ("The number 4 is left. Choose your next number: ")
          num_c = int(num_c);
     
     if num_c == legal_num:
          C_num_c = 4 - num_c
          print (f"I take away {C_num_c}")
          print ("I win. Please Try again - You might win next time!")

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM