我是编码的新手(从2天前开始),为了练习,我的一个朋友给我写了一个编写提供第n个斐波那契数或第n个点的序列的程序的任务。我使用input()成功完成了该任务,并直接向用户询问n,现在他扩展了任务,并要求我尝试使用sys.argv
获得相同的结果。在广泛使用google之后,我想出了如何打印所有给定参数并计算它们的方法,但是我无法弄清楚在函数中使用这些参数的任何方式。不幸的是,我似乎也找不到适合Google的关键字,这让我有点无人问津。
这是我最近的尝试:
import sys
from math import sqrt
print('Number of arguments:', len(sys.argv), 'arguments.')
print ('Argument List:', str(sys.argv))
Fibonacci = sys.argv[0]
value = sys.argv[1]
sequence = sys.argv[2]
def fib(value): int(1/sqrt(5)*(((1+sqrt(5))/2)**value-(((1-sqrt(5))/2)**value)))
print("The {}. value is".format(value), fib(value))
input("Close")
(小细节,尽管不重要:我将字符串从德语翻译成英语,这也是为什么它说“ {}。value”而不是“ {} st / nd / rd / th”的原因,这两种情况之间的区别是以后的问题。)
现在我希望在这里没有实现目标,但是使用一些适用于基于input()的代码的表达式几乎是我目前的最后一个想法。谁能给我指点我该如何进行?甚至暗示我应该对Google有所帮助,但到目前为止,我已经完全没有主意了。
编辑:我不知道这是否是您应该做的,但是我已经解决了我的问题,我想我也应该发布我的代码,以防其他人偶然遇到与此类似的问题。 。这是我的解决方法。
import sys
from math import sqrt
Fibonacci = sys.argv[0]
Entscheidung = (sys.argv[1])
n = int(sys.argv[2])
sequence = []
if Entscheidung == "Stelle":
def fib(n): return int(1/sqrt(5)*(((1+sqrt(5))/2)**n-((1-sqrt(5))/2)**n))
print("Die {}. Stelle beträgt:{}".format(n, fib(n)))
elif Entscheidung == "Folge":
def fib(n): return int(1/sqrt(5)*(((1+sqrt(5))/2)**n-((1-sqrt(5))/2)**n))
for i in range(n):
sequence.append(fib(i + 1))
print('[%s]' % ', '.join(map(str, sequence)))
input("Schließen")
请注意,我仍然是一个绝对的初学者,我不知道这种解决方案可能效率低下,编写错误,格式混乱。我所能保证的就是它能完成任务。
答案 0 :(得分:0)
是的,n = int(sys.argv[2])
是魅力所在。
现在,您是破解sys.argv
的专家,您可能想要$ pip install click
并让该程序包为您做一些解析:https://click.palletsprojects.com/en/7.x/
我想有条件地执行def
是一个选项,但有点奇怪。
将相同的定义粘贴到两个if
分支中没有帮助。
只需def
一次,就可以了。
答案 1 :(得分:0)
以下是对代码的重构:
input
。您的朋友肯定希望您制作一个可以正确重用的程序;需要用户交互会破坏这一点。sys.argv[0]
。如果不使用它,则无需捕获它(如果以后需要它,则它仍然存在)。if __name__
...中,以便可以将这段代码import
插入另一个程序中,而不会产生副作用。from math import sqrt
def fib_nth(n):
return int(1/sqrt(5)*(((1+sqrt(5))/2)**n-((1-sqrt(5))/2)**n))
def fib_seq(n):
sequence = []
for i in range(n):
sequence.append(fib_nth(i + 1))
return sequence
if __name__ == '__main__':
import sys
entscheidung = sys.argv[1]
n = int(sys.argv[2])
if entscheidung == "Stelle":
print("Die {}. Stelle beträgt:{}".format(n, fib_nth(n)))
elif entscheidung == "Folge":
print('[%s]' % ', '.join(map(str, fib_seq(n))))