免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2305 | 回复: 4
打印 上一主题 下一主题

局部变量和全局变量的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-04-29 17:42 |只看该作者 |倒序浏览
各位老师好!
我是一个python的初学者,甚至可以说是编程的初学者。今天尝试把一个心理测试用python来运行。结果总是不能正确统计分数。请各位达人帮助在下一二。
  1. #Filename:xinlitest.py

  2. explan = """
  3. \t这是一个专业的青少年心理逆反测试,请按您的第一感觉答题。\n
  4. \t本测试题只能做为参考..
  5. """

  6. print "--------------------------------------------------------------"
  7. print explan
  8. print "--------------------------------------------------------------"

  9. list = ["1.你不喜欢按照别人说的去做吗? ","2.你是否认为绝大多数规章制度都是不合理的,应该废除?"," 3.如果父母再次叮嘱同一件事,你就感到厌烦吗?"," 4.你欣赏与老师对着干的同学吗? ",
  10.         "5.你经常考虑事情的反面吗?"," 6.你是否对班干部指手画脚很讨厌,而故意不按他的要求去做? ","7.老师和父母越是要你用功学习,你越是不想学吗?"," 8.老师的话很多都是有漏洞、有问题的吗?",
  11.         " 9.你喜欢与众不同吗?"," 10.违反学校里的某些规定使你感到一种快乐吗?"," 11.别人的批评常常引起你的反感和愤怒吗? ","12.你是否认为老师有很多缺点和错误?"," 13.对别人不敢干的事你特别想尝试一下吗?",
  12.         "14.你喜欢搞一些使被捉弄者痛苦或愤怒的恶作剧吗?"," 15.你是否觉得父母和老师不应为一些小事大惊小怪小题大做?"," 16.你蔑视权威吗?"," 17.对批评你的人,你都感到讨厌和恼恨吗?",
  13.         "18.你是否认为冒险是一种极大的快乐? ","19.你习惯上总是按照大多数人说的去做吗? ","20.对你感到没有意思的事,别人怎么说你也不会好好去干吗?"," 21.你特别爱做令人大吃一惊的事吗?",
  14.         " 22.人们对你很不重视吗?"," 23.一旦决定了干一件事,不管别人指出这件事多么的成问题,你也不会改变主意吗?"," 24.你总是对老师表扬的同学感到反感,不想理那个同学吗? ","25.你喜欢干一些能引起很多同学注意的事吗?",
  15.         "26.当你被别人说得火冒三丈时,你就会偏不照他说的去做吗?"," 27.你讨厌那些当班干部的同学吗? ","28.你认为上课时出现一些老师没有意料到的情况令人开心吗? ","29.对伤了你的自尊心的人,你是否要给他添一些麻烦,让他感到你是不好惹的? ",
  16.         "30.越是禁止的东西,你越想设法得到吗?"]
  17. for s in list:
  18.    count = 0
  19.    print s
  20.    in_str = raw_input("请输入Y or N:\n-->")
  21.    if in_str == "y":
  22.       global count += 1
  23.    
  24.    
  25.       
  26.    print count
复制代码

论坛徽章:
0
2 [报告]
发表于 2013-04-29 22:19 |只看该作者
1. 建议把list中内容放到文件中,每行一个问题,直接从文件中读比较好一点。

代码的错误不止一点,不仅仅是变量的问题,还有编码的问题,逻辑流程额问题,更改如下,自己慢慢看吧:
  1. import string

  2. explain = u"""
  3. \t这是一个专业的青少年心理逆反测试,请按您的第一感觉答题。\n
  4. \t本测试题只能做为参考..
  5. """

  6. print "--------------------------------------------------------------"
  7. print explain
  8. print "--------------------------------------------------------------"

  9. list = [u"1.你不喜欢按照别人说的去做吗? ",
  10.         u"2.你是否认为绝大多数规章制度都是不合理的,应该废除?",
  11.         u"3.如果父母再次叮嘱同一件事,你就感到厌烦吗?",
  12.         u"4.你欣赏与老师对着干的同学吗? ",
  13.         u"5.你经常考虑事情的反面吗?",
  14.         u"6.你是否对班干部指手画脚很讨厌,而故意不按他的要求去做? ",
  15.         u"7.老师和父母越是要你用功学习,你越是不想学吗?",
  16.         u"8.老师的话很多都是有漏洞、有问题的吗?",
  17.         u"9.你喜欢与众不同吗?",
  18.         u"10.违反学校里的某些规定使你感到一种快乐吗?",
  19.         u"11.别人的批评常常引起你的反感和愤怒吗? ",
  20.         u"12.你是否认为老师有很多缺点和错误?",
  21.         u"13.对别人不敢干的事你特别想尝试一下吗?",
  22.         u"14.你喜欢搞一些使被捉弄者痛苦或愤怒的恶作剧吗?",
  23.         u"15.你是否觉得父母和老师不应为一些小事大惊小怪小题大做?",
  24.         u"16.你蔑视权威吗?",
  25.         u"17.对批评你的人,你都感到讨厌和恼恨吗?",
  26.         u"18.你是否认为冒险是一种极大的快乐? ",
  27.         u"19.你习惯上总是按照大多数人说的去做吗? ",
  28.         u"20.对你感到没有意思的事,别人怎么说你也不会好好去干吗?",
  29.         u"21.你特别爱做令人大吃一惊的事吗?",
  30.         u"22.人们对你很不重视吗?",
  31.         u"23.一旦决定了干一件事,不管别人指出这件事多么的成问题,你也不会改变主意吗?",
  32.         u"24.你总是对老师表扬的同学感到反感,不想理那个同学吗? ",
  33.         u"25.你喜欢干一些能引起很多同学注意的事吗?",
  34.         u"26.当你被别人说得火冒三丈时,你就会偏不照他说的去做吗?",
  35.         u"27.你讨厌那些当班干部的同学吗? ",
  36.         u"28.你认为上课时出现一些老师没有意料到的情况令人开心吗? ",
  37.         u"29.对伤了你的自尊心的人,你是否要给他添一些麻烦,让他感到你是不好惹的? ",
  38.         u"30.越是禁止的东西,你越想设法得到吗?"]
  39. count = 0
  40. in_str=""
  41. for s in list:
  42.    while(len(string.strip(in_str))==0): #如果什么都没有输入,就重复当前问题
  43.      in_str = raw_input(s+u"\n请输入Y or N:\n-->",)
  44.    in_str=string.strip(string.lower(in_str)) #in_str返回的是字符串,需要去首尾空格,取第一个字母
  45.    if in_str == u"y":
  46.       count += 1
  47.    else:#其他的输入都当成No
  48.       pass
  49.    print  u"累计回答了%d个yes"%count
  50.    in_str=""#记得将用户输入复位,准备下一个问题
  51.    
复制代码

论坛徽章:
0
3 [报告]
发表于 2013-04-30 09:58 |只看该作者
本帖最后由 wohoohoo 于 2013-04-30 10:18 编辑
  1. import string

  2. explain = """
  3. \t这是一个专业的青少年心理逆反测试,请按您的第一感觉答题。\n
  4. \t本测试题只能做为参考..
  5. """

  6. print "--------------------------------------------------------------"
  7. print explain
  8. print "--------------------------------------------------------------"

  9. list = ["1.你不喜欢按照别人说的去做吗? ",
  10.         "2.你是否认为绝大多数规章制度都是不合理的,应该废除?",
  11.         "3.如果父母再次叮嘱同一件事,你就感到厌烦吗?",
  12.         "4.你欣赏与老师对着干的同学吗? ",
  13.         "5.你经常考虑事情的反面吗?",
  14.         "6.你是否对班干部指手画脚很讨厌,而故意不按他的要求去做? ",
  15.         "7.老师和父母越是要你用功学习,你越是不想学吗?",
  16.         "8.老师的话很多都是有漏洞、有问题的吗?",
  17.         "9.你喜欢与众不同吗?",
  18.         "10.违反学校里的某些规定使你感到一种快乐吗?",
  19.         "11.别人的批评常常引起你的反感和愤怒吗? ",
  20.         "12.你是否认为老师有很多缺点和错误?",
  21.         "13.对别人不敢干的事你特别想尝试一下吗?",
  22.         "14.你喜欢搞一些使被捉弄者痛苦或愤怒的恶作剧吗?",
  23.         "15.你是否觉得父母和老师不应为一些小事大惊小怪小题大做?",
  24.         "16.你蔑视权威吗?",
  25.         "17.对批评你的人,你都感到讨厌和恼恨吗?",
  26.         "18.你是否认为冒险是一种极大的快乐? ",
  27.        # "19.你习惯上总是按照大多数人说的去做吗? ",
  28.         "19.对你感到没有意思的事,别人怎么说你也不会好好去干吗?",
  29.         "20.你特别爱做令人大吃一惊的事吗?",
  30.         "21.人们对你很不重视吗?",
  31.         "22.一旦决定了干一件事,不管别人指出这件事多么的成问题,你也不会改变主意吗?",
  32.         "23.你总是对老师表扬的同学感到反感,不想理那个同学吗? ",
  33.         "24.你喜欢干一些能引起很多同学注意的事吗?",
  34.         "25.当你被别人说得火冒三丈时,你就会偏不照他说的去做吗?",
  35.         "26.你讨厌那些当班干部的同学吗? ",
  36.         "27.你认为上课时出现一些老师没有意料到的情况令人开心吗? ",
  37.         "28.对伤了你的自尊心的人,你是否要给他添一些麻烦,让他感到你是不好惹的? ",
  38.         "29.越是禁止的东西,你越想设法得到吗?"]
  39. count = 0
  40. in_str=""
  41. for s in list:
  42.    while(len(string.strip(in_str))==0): #如果什么都没有输入,就重复当前问题
  43.      in_str = raw_input(s+"\n请输入Y or N:\n-->",)
  44.    in_str=string.strip(string.lower(in_str)) #in_str返回的是字符串,需要去首尾空格,取第一个字母
  45.    if in_str == "y":
  46.       count += 1
  47.    else:#其他的输入都当成No
  48.       pass
  49.    print  "现在的分数是%d"%count
  50.    in_str=""#记得将用户输入复位,准备下一个问题
  51.    
  52. print "19.你习惯上总是按照大多数人说的去做吗? "

  53. in_str = raw_input("请输入Y or N:\n-->")
  54. in_str=string.strip(string.lower(in_str)) #in_str返回的是字符串,需要去首尾空格,取第一个字母
  55.    if in_str == "n":#编译到这会报错"IndentationError: unexpected indent"
  56.       count += 1
  57.    else:#其他的输入都当成Yes
  58.       pass
  59.    print  "现在的分数是%d"%count

  60. if count <=9:
  61.    print """
  62.    总分在0至9分之间的孩子逆反心理很弱。只干并且只喜欢干该干的,不去干不该干的。
  63.    """
  64. elif  10<=count <=20:
  65.    print """
  66.    总分在10至20分之间的孩子存在一定的否定倾向。激动时可能丧失理智,意气用事,有时会做一些不该做的傻事。
  67.    """
  68. else  21<=count <=30:
  69.    print """
  70.    总分在21至30分之间的孩子有相当严重的逆反心理。所想的和所干的总是与众不同,
  71.    与习俗和规定不符。如果不清醒地意识到这一问题,并不努力加以克服,则只能是一个不受大家欢迎的独行者。
  72.    """
复制代码
谢谢老师的热心解答。现还有几个问题向您请教。
1、你在每个字符前都加了"u"是不是转换为unicode?在我的环境里加了u后中文全是乱码。
2、再想请教的是list表里的问题,回答yes计一分,no不计分,唯一是19题不同,yes计0分,no计1分,我应该如何判断。我现在想出的笨办法就是在list外在用一个变量来代表19题。但我想总有更好的方法。
3、对用户的输入判断时,能解决用户不输入y or n,而是其他字符时,告知他一定要输入y or n吗
4、为什么我的count计数始终是1,不能累加,加了全局变量后编译又会报错。
5、上面的代码中运行到  " if in_str == "n":#编译到这会报错"IndentationError: unexpected indent" ",是什么原因呢?

以上问题麻烦你了。谢谢

论坛徽章:
0
4 [报告]
发表于 2013-04-30 10:27 |只看该作者
  1. import string

  2. explain = """
  3. \t这是一个专业的青少年心理逆反测试,请按您的第一感觉答题。\n
  4. \t本测试题只能做为参考..
  5. """

  6. print "--------------------------------------------------------------"
  7. print explain
  8. print "--------------------------------------------------------------"

  9. list = ["1.你不喜欢按照别人说的去做吗? ",
  10.         "2.你是否认为绝大多数规章制度都是不合理的,应该废除?",
  11.         "3.如果父母再次叮嘱同一件事,你就感到厌烦吗?",
  12.         "4.你欣赏与老师对着干的同学吗? ",
  13.         "5.你经常考虑事情的反面吗?",
  14.         "6.你是否对班干部指手画脚很讨厌,而故意不按他的要求去做? ",
  15.         "7.老师和父母越是要你用功学习,你越是不想学吗?",
  16.         "8.老师的话很多都是有漏洞、有问题的吗?",
  17.         "9.你喜欢与众不同吗?",
  18.         "10.违反学校里的某些规定使你感到一种快乐吗?",
  19.         "11.别人的批评常常引起你的反感和愤怒吗? ",
  20.         "12.你是否认为老师有很多缺点和错误?",
  21.         "13.对别人不敢干的事你特别想尝试一下吗?",
  22.         "14.你喜欢搞一些使被捉弄者痛苦或愤怒的恶作剧吗?",
  23.         "15.你是否觉得父母和老师不应为一些小事大惊小怪小题大做?",
  24.         "16.你蔑视权威吗?",
  25.         "17.对批评你的人,你都感到讨厌和恼恨吗?",
  26.         "18.你是否认为冒险是一种极大的快乐? ",
  27.        # "19.你习惯上总是按照大多数人说的去做吗? ",
  28.         "19.对你感到没有意思的事,别人怎么说你也不会好好去干吗?",
  29.         "20.你特别爱做令人大吃一惊的事吗?",
  30.         "21.人们对你很不重视吗?",
  31.         "22.一旦决定了干一件事,不管别人指出这件事多么的成问题,你也不会改变主意吗?",
  32.         "23.你总是对老师表扬的同学感到反感,不想理那个同学吗? ",
  33.         "24.你喜欢干一些能引起很多同学注意的事吗?",
  34.         "25.当你被别人说得火冒三丈时,你就会偏不照他说的去做吗?",
  35.         "26.你讨厌那些当班干部的同学吗? ",
  36.         "27.你认为上课时出现一些老师没有意料到的情况令人开心吗? ",
  37.         "28.对伤了你的自尊心的人,你是否要给他添一些麻烦,让他感到你是不好惹的? ",
  38.         "29.越是禁止的东西,你越想设法得到吗?"]
  39. count = 0
  40. in_str=""
  41. for s in list:
  42.    while(len(string.strip(in_str))==0): #如果什么都没有输入,就重复当前问题
  43.      in_str = raw_input(s+"\n请输入Y or N:\n-->",)
  44.    in_str=string.strip(string.lower(in_str)) #in_str返回的是字符串,需要去首尾空格,取第一个字母
  45.    if in_str == "y":
  46.       count += 1
  47.    else:#其他的输入都当成No
  48.       pass
  49.    print  "现在的分数是%d"%count
  50.    in_str=""#记得将用户输入复位,准备下一个问题
  51.    
  52. print "30.你习惯上总是按照大多数人说的去做吗? "
  53. in_str = raw_input("请输入Y or N:\n-->")
  54. if in_str == "n":
  55.    count += 1
  56. else:
  57.    pass
  58. print "现在的分数是%d"%count
  59. in_str = ""



  60. if count <=9:
  61.    print """
  62.    总分在0至9分之间的孩子逆反心理很弱。只干并且只喜欢干该干的,不去干不该干的。
  63.    """
  64. elif  10<=count <=20:
  65.    print """
  66.    总分在10至20分之间的孩子存在一定的否定倾向。激动时可能丧失理智,意气用事,有时会做一些不该做的傻事。
  67.    """
  68. else:
  69.    print """
  70.    总分在21至30分之间的孩子有相当严重的逆反心理。所想的和所干的总是与众不同,
  71.    与习俗和规定不符。如果不清醒地意识到这一问题,并不努力加以克服,则只能是一个不受大家欢迎的独行者。
  72.    """
复制代码
这是最终能运行的版本。请老师指点有什么白痴问题。呵呵。。

论坛徽章:
0
5 [报告]
发表于 2013-04-30 10:38 |只看该作者
在win8命令行下运行时出错:“SyntaxError: Non-ASCII character '\xd5' in file xinlitest2.py on line 5, but no
encoding declared; see http://www.python.org/peps/pep-0263.html for details”
我真的郁闷了。难道只能在wingide里运行吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP