这是改变int和str的最佳方式吗?

时间:2015-01-14 01:48:32

标签: python

这是我的第一个python程序。它会询问您的姓名,年龄以及剩余的天数 生日。然后它会告诉你你有多少天。我添加了一些写入功能,以便将数据写入另一个文件(input.txt)这段代码是干净的还是更简洁?我特别想知道改变字符串和整数部分。

from sys import argv
script, filename = argv

target = open(filename, 'a+')
name = raw_input("What is your name?\n")
print "Hello, %s" % name

years = int(raw_input("How old are you in years?\n"))
extra_days = int(raw_input("How many days until your birthday?\n"))
days = years * 365.25 + 365 - extra_days
print "You are %r days old" % int(days)
length = len(name)
print "Your name is %d letters long." % length

target.write(name + " is " + str(days) + "days old.\n")

target.close()

2 个答案:

答案 0 :(得分:1)

以下是我的写作方式:

import sys # simple import is clearer when used below
script, filename = sys.argv

with open(filename, 'a+') as target: # will automatically close() at the end
    name = raw_input("What is your name?\n")
    print "Hello,", name

    years = int(raw_input("How old are you in years?\n"))
    extra_days = int(raw_input("How many days until your birthday?\n"))
    days = years * 365.25 + 365 - extra_days
    print "You are", days, "days old"
    length = len(name)
    print "Your name is", length, "letters long."

    print >>target, name, "is", days, "days old." # auto newline and formatting

如果您喜欢 ex situ 格式化字符串,就像使用%一样,您至少应该切换到更新的样式,如"The answer is {}.".format(42)。这样您就不必担心要使用哪种格式说明符,并且它还为您提供了一些其他功能。

答案 1 :(得分:1)

with open(filename,"a+") as target:
    name = raw_input("What is your name?\n")
    print "Hello, {}".format(name)

    years = int(raw_input("How old are you in years?\n"))
    extra_days = int(raw_input("How many days until your birthday?\n"))
    days = years * 365.25 + 365 - extra_days
    print "You are {} days old".format(days)
    print "Your name is {} letters long.".format(len(name))

    target.write("{} is {} days old".format(name,str(days)))

这更好,习惯使用format()函数:-)。此外with open要好得多,您也不必关心文件流程。最好你发现一些错误,你不知道用户可能会在years上推送任何字符串,所以;

with open(filename,"a+") as target:
    try:
        name = raw_input("What is your name?\n")
        print "Hello, {}".format(name)

        years = int(raw_input("How old are you in years?\n"))
        extra_days = int(raw_input("How many days until your birthday?\n"))
        days = years * 365.25 + 365 - extra_days
        print "You are {} days old".format(days)
        print "Your name is {} letters long.".format(len(name))

        target.write("{} is {} days old".format(name,str(days)))
    except:
        print ("An error occured, please try again.")