我正在学习Python,这本书要求我“使用函数制作程序”''所以我有点创意,并试图尽可能多地使用到目前为止制作具有以下特征的程序:
- 创建一个打开并读取此文件的Python程序。
- 向用户介绍并提供脚本名称
- 使用函数是否存在数学问题 -Sum 2号码
- 创建一个新文本文件,并使用函数
复制其中的函数结果- 打开文本文件并在程序中读取它然后关闭它。
醇>
所以一切都是正确的,谷歌搜索了许多东西,使其工作并学到了一些东西。该脚本确实创建了一个新的文本文件,但是我在使用 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文档中。
答案 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 = 5
和n2 = 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)
虽然您应该了解更现代的字符串格式化技术。