【问题标题】:How do I have user's response to raw_input( ) access a string of the same name?如何让用户对 raw_input( ) 的响应访问同名字符串?
【发布时间】:2014-07-03 17:40:21
【问题描述】:

我试图让两个用户输入成为我的 Python 脚本随后将访问的文件名的一部分。

例如,我想使用用户输入的片段来构造:date_time_place.txt。我知道我可以通过连接字符串来做到这一点。

我向用户询问 raw_input() 日期和时间,但我已经命名了他们可以使用的日期和时间选项:

date1 = yesterday
date2 = today
date3 = tomorrow

time1 = morning
time2 = afternoon
time3 = evening

我指定用户必须以日期#或时间#的形式输入他或她的响应。

我想要的是能够使用他或她的响应来获得已经分配的日期#或时间#。这种事情怎么办?

【问题讨论】:

  • 您通常不要这样做。请改用字典。
  • 使用dictionary
  • @MartijnPieters,感谢您详细说明!我是使用 Python 的新手,所以您的解释非常有帮助。我会尽快接受它。
  • @sweeneyrod,谢谢,但对于像我这样的新人,更详细的解释会有所帮助。

标签: python string filenames raw-input


【解决方案1】:

虽然您可以,但您不应该尝试这样做。将变量放入字典中;

dates = {
    'date1': yesterday,
    'date2': today,
    'date3': tomorrow,
}

times = {
    'time1': morning,
    'time2': afternoon,
    'time3': evening,
}

现在访问就像dates[userstring]times[userstring] 一样简单。

可以使用locals() function 访问局部变量,使用globals() 访问全局变量(两者都返回一个字典),但是您不能限制它们有权访问的名称。

【讨论】:

    【解决方案2】:
    time = ["morning","afternoon", "evening"]
    
    print """please choose one 0:morning
    1:afternoon
    2:evening """
    
    daytime = time[int(raw_input())]
    

    这是一个示例解决方案。检查 out of index 值和非 int 值异常。

    【讨论】:

    • 使用 Python 2 的 input() 是一个巨大的安全漏洞;它在 Python 3 中被删除并替换为 raw_input()
    • 你能提供一个链接吗? :)
    • 感谢您提供的重要信息,我做了一些研究并且(对于那些感兴趣的人): input() 基本上每次都会调用 eval(),所以如果你使用 input() 可以做任何事情:例如: >> input("Your name?")__import__("os").system("rm -rf /") #imports os, runs "rm -rf /"(delete root dir)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-30
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 2021-12-27
    相关资源
    最近更新 更多