鱼C论坛

 找回密码
 立即注册
查看: 2167|回复: 2

[已解决]是不是变量命名有问题

[复制链接]
发表于 2023-11-7 15:27:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
这个报错,错误是UnboundLocalError: cannot access local variable 'sentence' where it is not associated with a value
有大佬帮忙瞅瞅嘛QuQ

  1. from xpinyin import Pinyin
  2.    
  3. def getstr():
  4.     sentence = input("请输入一句话")
  5.     while len(sentence)< 2 :
  6.         sentence = input("字数太少,请重新输入")
  7.     return sentence

  8. def getpy():
  9.     p =Pinyin()
  10.     sentence = p.get_pinyin(sentence)
  11.     sentence = sentence.split("-")
  12.     return sentence

  13. def yesno():
  14.     if sentencetrans == sentencetrans[::-1]:
  15.         print(f"{sentence}是回文")

  16.     else:
  17.         print(f"{sentence}不是回文")

  18. sentence = getstr()
  19. sentencetrans = getpy()

  20. getstr()
  21. getpy()
  22. yesno()

  23.         
复制代码

最佳答案
2023-11-7 15:28:14
问题:Python代码中的变量命名问题

在你的代码中,的确存在一个变量命名的问题,导致了 UnboundLocalError。这个错误表明在函数内部试图访问一个未赋值的本地变量。让我们来修改一下代码:
  1. from xpinyin import Pinyin
  2. def get_str():
  3.     sentence = input("请输入一句话")
  4.     while len(sentence) < 2:
  5.         sentence = input("字数太少,请重新输入")
  6.     return sentence
  7. def get_py(sentence):
  8.     p = Pinyin()
  9.     sentence = p.get_pinyin(sentence)
  10.     sentence = sentence.split("-")
  11.     return sentence
  12. def yes_no(sentencetrans, sentence):
  13.     if sentencetrans == sentencetrans[::-1]:
  14.         print(f"{sentence}是回文")
  15.     else:
  16.         print(f"{sentence}不是回文")
  17. sentence = get_str()
  18. sentencetrans = get_py(sentence)
  19. yes_no(sentencetrans, sentence)
复制代码

上面的修改主要包括以下几点:
1. 将函数名从 getstr 修改为 get_str,遵循了 Python 的命名规范。
2. 在 get_py 函数中增加了一个参数 sentence,以便在函数内部能够正确访问该变量。
3. 修改了 yes_no 函数的定义,增加了两个参数 sentencetrans 和 sentence,以便在函数内部正确使用这两个变量。

通过这些修改,你的代码应该可以正常运行了。

球一个最佳答案谢谢啦!这对我非常重要!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-11-7 15:28:09 | 显示全部楼层
问题出在变量命名上。在函数 getpy() 中,你尝试使用变量 sentence ,但是这个变量并没有在 getpy() 函数的作用域内定义,所以会报错。为了解决这个问题,你需要将 sentence 作为参数传递给 getpy() 函数,并在函数内部使用该参数。

修改后的代码如下:

  1. from xpinyin import Pinyin

  2. def getstr():
  3.     sentence = input("请输入一句话")
  4.     while len(sentence) < 2:
  5.         sentence = input("字数太少,请重新输入")
  6.     return sentence

  7. def getpy(sentence):
  8.     p = Pinyin()
  9.     sentence = p.get_pinyin(sentence)
  10.     sentence = sentence.split("-")
  11.     return sentence

  12. def yesno():
  13.     if sentencetrans == sentencetrans[::-1]:
  14.         print(f"{sentence}是回文")
  15.     else:
  16.         print(f"{sentence}不是回文")

  17. sentence = getstr()
  18. sentencetrans = getpy(sentence)

  19. getstr()
  20. getpy(sentence)
  21. yesno()
复制代码


这样修改后,你就可以在 getpy() 函数中正确访问到 sentence 变量了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-7 15:28:14 | 显示全部楼层    本楼为最佳答案   
问题:Python代码中的变量命名问题

在你的代码中,的确存在一个变量命名的问题,导致了 UnboundLocalError。这个错误表明在函数内部试图访问一个未赋值的本地变量。让我们来修改一下代码:
  1. from xpinyin import Pinyin
  2. def get_str():
  3.     sentence = input("请输入一句话")
  4.     while len(sentence) < 2:
  5.         sentence = input("字数太少,请重新输入")
  6.     return sentence
  7. def get_py(sentence):
  8.     p = Pinyin()
  9.     sentence = p.get_pinyin(sentence)
  10.     sentence = sentence.split("-")
  11.     return sentence
  12. def yes_no(sentencetrans, sentence):
  13.     if sentencetrans == sentencetrans[::-1]:
  14.         print(f"{sentence}是回文")
  15.     else:
  16.         print(f"{sentence}不是回文")
  17. sentence = get_str()
  18. sentencetrans = get_py(sentence)
  19. yes_no(sentencetrans, sentence)
复制代码

上面的修改主要包括以下几点:
1. 将函数名从 getstr 修改为 get_str,遵循了 Python 的命名规范。
2. 在 get_py 函数中增加了一个参数 sentence,以便在函数内部能够正确访问该变量。
3. 修改了 yes_no 函数的定义,增加了两个参数 sentencetrans 和 sentence,以便在函数内部正确使用这两个变量。

通过这些修改,你的代码应该可以正常运行了。

球一个最佳答案谢谢啦!这对我非常重要!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-22 19:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表