将变量从子例程全球化到另一个子例程

匿名的

将变量从一个子例程传递到另一个子例程时遇到麻烦。

这是代码:

def loop1():
    try:
        age=int(input("How old are you? "))
    except ValueError:
        print ("Please enter a numerical integer of your age. For example: 19 ")
        print("")
        loop1()
    if age>0:
        program()

def program():
    print("")
    print("[1] - Knife / Spray Paint / Lottery Ticket ")
    print("[2] - Alcohol / Tobacco ")
    print("[3] - Anything else ")
    print("")
    loop2()

def loop2():
    try:
        item=int(input("What would you like to buy from the options above? "))
        print("")
    except ValueError:
        print ("Please enter a numerical integer of your item. For example (if you wanted to buy alcohol): 2 ")
        print("")
        loop2()
    if item>0:
        validation()

def validation(): 
    if item == 1 and 16>age :
        print("Sale Denied - Item cannot be sold to Under 16s. ")
    elif item == 1 and 16<age:
        print("Sale Accepted. ")

    elif item == 2 and 18>age:
        print("Sale Denied - Item cannot be sold to Under 18s. ")
    elif item == 2 and 25>age>18:
        print("Check ID before selling alcohol - Challenge 25. ")
    elif item == 2 and 18<age:
        print("Sale Accepted. ")

    elif item == 3:
        print("Sale Accepted. ")

loop1()

结果如下:

How old are you? 21

[1] - Knife / Spray Paint / Lottery Ticket 
[2] - Alcohol / Tobacco 
[3] - Anything else 

What would you like to buy from the options above? 2

Traceback (most recent call last):
  File "D:/Shop Program.py", line 48, in <module>
    loop1()
  File "D:/Test.py", line 9, in loop1
    program()
  File "D:/Shop Program.py", line 17, in program
    loop2()
  File "D:/Shop Program.py", line 28, in loop2
    validation()
  File "D:/Shop Program.py", line 33, in validation
    if item == 1 and 16>age :
NameError: global name 'item' is not defined

如您从上面的错误消息中看到的那样global name 'item' is not defined我尝试将放置global item在上方def vaildation():,但仍然遇到相同的错误。

琼斯·哈珀

而不是使用global,这是一种不好的做法(在Python和其他地方),明确地传递itemloop2validation

def loop2(age):
    ...
    if item > 0:
        validation(item, age)
                 # ^ pass it here

def validation(item, age): 
             # ^ receive it here
    if item == 1 and 16 > age:
        ...

请注意,我对做了类似的事情age,应该在loop2调用时传递使用递归进行输入验证不是理想的方法。请参阅要求用户提供输入信息,直到他们给出有效的替代方法答复为止

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在 VBA 中将字段的设置变量名称从一个子例程传递到另一个子例程?

来自分类Dev

VBA EXCEL:如何在另一个子例程中调用一个子例程?

来自分类Dev

在另一个子例程中运行一个子例程-编译错误:参数不是可选的

来自分类Dev

AHK-设置一个子例程以通过按其热键来触发另一个子例程

来自分类Dev

将值从子窗体传递到另一个子窗体

来自分类Dev

将参数从另一个模块perl传递给子例程

来自分类Dev

从模块仅加载一个子例程

来自分类Dev

将两个结果在一个子传递到另一个子

来自分类Dev

将点击事件从一个子组件传递到另一个子组件

来自分类Dev

OpenMP中一个模块内的私有和公共变量以及一个子例程

来自分类Dev

如何将子组件路由到另一个子组件

来自分类Dev

如何将工作表变量传递给另一个子

来自分类Dev

将变量更改为另一个子

来自分类Dev

从子列表中删除与Linq匹配另一个子列表的项目

来自分类Dev

从子列表中删除与Linq匹配另一个子列表的项目

来自分类Dev

如何从子组件访问 Angular 4 中的另一个子组件

来自分类Dev

将轴限制从一个子图(“相等”方面)复制到另一个子图中

来自分类Dev

Vue.js:将数据从一个子组件传递到具有相同父组件的另一个子组件吗?

来自分类Dev

XLST:将ID从一个子节点复制到另一个子节点

来自分类Dev

将子域URL重定向到IIS中的另一个子域

来自分类Dev

htaccess:将子文件夹重定向到另一个子文件夹

来自分类Dev

为什么对于argmax abs有一个blas子例程(ISAMAX),但对于argmax没有一个子例程?

来自分类Dev

golang 2 go例程,如果一个终止则终止另一个

来自分类Dev

如何将一个子域重写为另一个子域?

来自分类Dev

想要将值从子组件传递给父组件,然后将这些值传递给另一个子组件

来自分类Dev

从另一个子执行子

来自分类Dev

将变量传递到另一个脚本

来自分类Dev

在VBA中将变量的值从一个子变量转换为另一个子变量

来自分类Dev

为什么互斥锁代码会停止另一个完整的例程?

Related 相关文章

  1. 1

    如何在 VBA 中将字段的设置变量名称从一个子例程传递到另一个子例程?

  2. 2

    VBA EXCEL:如何在另一个子例程中调用一个子例程?

  3. 3

    在另一个子例程中运行一个子例程-编译错误:参数不是可选的

  4. 4

    AHK-设置一个子例程以通过按其热键来触发另一个子例程

  5. 5

    将值从子窗体传递到另一个子窗体

  6. 6

    将参数从另一个模块perl传递给子例程

  7. 7

    从模块仅加载一个子例程

  8. 8

    将两个结果在一个子传递到另一个子

  9. 9

    将点击事件从一个子组件传递到另一个子组件

  10. 10

    OpenMP中一个模块内的私有和公共变量以及一个子例程

  11. 11

    如何将子组件路由到另一个子组件

  12. 12

    如何将工作表变量传递给另一个子

  13. 13

    将变量更改为另一个子

  14. 14

    从子列表中删除与Linq匹配另一个子列表的项目

  15. 15

    从子列表中删除与Linq匹配另一个子列表的项目

  16. 16

    如何从子组件访问 Angular 4 中的另一个子组件

  17. 17

    将轴限制从一个子图(“相等”方面)复制到另一个子图中

  18. 18

    Vue.js:将数据从一个子组件传递到具有相同父组件的另一个子组件吗?

  19. 19

    XLST:将ID从一个子节点复制到另一个子节点

  20. 20

    将子域URL重定向到IIS中的另一个子域

  21. 21

    htaccess:将子文件夹重定向到另一个子文件夹

  22. 22

    为什么对于argmax abs有一个blas子例程(ISAMAX),但对于argmax没有一个子例程?

  23. 23

    golang 2 go例程,如果一个终止则终止另一个

  24. 24

    如何将一个子域重写为另一个子域?

  25. 25

    想要将值从子组件传递给父组件,然后将这些值传递给另一个子组件

  26. 26

    从另一个子执行子

  27. 27

    将变量传递到另一个脚本

  28. 28

    在VBA中将变量的值从一个子变量转换为另一个子变量

  29. 29

    为什么互斥锁代码会停止另一个完整的例程?

热门标签

归档