第一个程序使用函数

时间:2014-12-20 05:23:41

标签: python

我正在学习Python,这本书要求我“使用函数制作程序”''所以我有点创意,并试图尽可能多地使用到目前为止制作具有以下特征的程序:

  
      
  1. 创建一个打开并读取此文件的Python程序。
  2.   
  3. 向用户介绍并提供脚本名称
  4.   
  5. 使用函数是否存在数学问题   -Sum 2号码
  6.   
  7. 创建一个新文本文件,并使用函数
  8. 复制其中的函数结果   
  9. 打开文本文件并在程序中读取它然后关闭它。
  10.   

所以一切都是正确的,谷歌搜索了许多东西,使其工作并学到了一些东西。该脚本确实创建了一个新的文本文件,但是我在使用 file.write(res)将函数获取的值复制到其中时遇到了问题

以下是代码:

from sys import argv

script, file_1 = argv
txt = open(file_1)

def average_values (n1, n2): 
    res = (n1 + n2)
    return res

print "Hello my name is Lenard or, as my creator called me, %s. \nYou have been instructed to do this:\n" % script
print txt.read()
print "The results will be copied to a new Text document but they will also be printed at the end of the program, thanks for your preference!"

n1 = raw_input("Introduce Number 1, please: ")
n2 = raw_input("Introduce Number 2, please: ")

res = average_values(n1, n2)

fname = 'Results.txt'
file_sample = open(fname, 'w')
file_sample.write(res)
print "Here are the results:..." 
print res
print file_sample.read()

当我运行它时,我收到以下错误:'' res未指定''。我知道这对你们中的一些人来说非常简单,但是我尝试了一些东西而且我不能让它写出函数获得的值......那么任何想法?

我真的很想不得不问这个并让别人做我的工作,但我确实尝试解决问题,我只是不知道该做什么,会欣赏任何线索。

感谢您的关注。

编辑3

现在我设法创建该文件。然而,打印N1和N2的值(比如说5和5)而不是将它们相加n1和n2。我得到这个结果:55而不是10.相同的结果写在新的txt文档中。

3 个答案:

答案 0 :(得分:3)

回答你的第二个问题, 有两种解决方案:

解决方案1:raw_input更改为:

n1 = float(raw_input("Introduce Number 1, please: "))
n2 = float(raw_input("Introduce Number 2, please: "))

Python是一种动态类型语言,它假定来自上下文的变量类型。在你的情况下,

def average_values (n1, n2): 
    res = (n1+ n2)
    return res

这里n1和n2可以接受数字和字符串。值发送到此函数,如果它是一个字符串' +'表现得像一个连接运算符。这就是为什么当您尝试使用n1 = 5n2 = 5时,它会返回" 55" beacuse raw_input返回一个你需要的数字5的字符串。该函数将5s连接到" 55"。

解决方案2:

 def average_values (n1, n2): 
        res = float(n1) + float(n2)
        return res

答案 1 :(得分:2)

两个问题 - 您没有调用您的功能,而且您没有从中返回值!

您可能希望将代码的最后一位更改为:

def average_students (n1, n2): 
    res = (float(n1) + float(n2)) / 2
    print "The result is %f" %res
    return res

n1 = raw_input("Introduce Number 1, please: ")
n2 = raw_input("Introduce Number 2, please: ")

res = average_students(n1,n2)

# print intro stuff here if needed

fname = 'Results.txt'
output = open(fname, 'w')
output.write(res)
output.close()

print "Write completed, wrote:"
print res

这里的区别是average_students函数返回值并打印它,然后从代码中调用该函数+保存结果

此外,正如评论中所提到的,还有一些其他问题,请参阅 PM 2Ring 中的评论,了解为何我必须进行其他更改

答案 2 :(得分:2)

这是一个稍微修改过的程序版本(我认为:))可以满足您的需求。

#!/usr/bin/env python

from sys import argv

def average_values(n1, n2): 
    res = 0.5 * (n1 + n2)
    return res


script, file_1 = argv

print "Hello my name is Lenard or, as my creator called me, %s. \
You have been instructed to do this:\n" % script

txt = open(file_1)
print txt.read()
txt.close()    

print "The results will be copied to a new Text document but they will also \
be printed at the end of the program, thanks for your preference!"
n1 = int(raw_input("Introduce Number 1, please: "))
n2 = int(raw_input("Introduce Number 2, please: "))

res = average_values(n1, n2)

fname = 'Results.txt'
file_sample = open(fname, 'w')
file_sample.write(str(res))
file_sample.close()

print "Here are the results:..." 
print res

file_sample = open(fname, 'r')
print file_sample.read()
file_sample.close()

我修改了你的average_values()函数,以便它实际上计算其参数的平均值。

我还更改了输入语句,使它们返回整数而不是字符串,并更改了write()调用,因此它的参数是一个字符串。

我还在适当的时候关闭了文件。特别是,在您阅读之前,需要关闭您打开的文件。

此代码还有一些改进空间,所以不要把它当作一个完美的例子,但我希望它会让你走上正确的道路。


修改

我想我应该提到那些' Results.txt'将包含结果,它不会以换行结束。您可以通过更改

来更改它

file_sample.write(str(res))

file_sample.write("%f\n" % res)

虽然您应该了解更现代的字符串格式化技术。