我对编码非常陌生(两天前开始),为了练习,一个朋友给了我一个任务,写一个程序,提供第n个斐波那契数或第n个点的序列。我使用input()成功地完成了该任务,并直接向用户请求n,现在他扩展了该任务,并让我尝试使用input()获得相同的结果系统argv你知道吗
在广泛使用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")
(小细节,虽然不重要:我把字符串从德语翻译成英语,这也是为什么它说“{}。值“而不是”{}st/nd/rd/th“,这些情况之间的区别是以后的问题。)
现在我希望离目标还有一段距离,但是使用一些用于基于input()的代码的表达式几乎是我现在的最后一个想法。有人能给我一个指示,告诉我怎么做吗?即使是一个关于我应该做什么的暗示,谷歌也会有所帮助,但到目前为止,我完全没有主意了。你知道吗
编辑:我不知道这是否是你应该做的,但我已经解决了我的问题,我想我可能会张贴我的代码,以防别人偶然发现这个线程与类似的问题。这是我的解决办法。你知道吗
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")
请注意,我仍然是一个绝对的初学者,这个解决方案可能是低效的,写得不好,格式混乱,我不知道。我能保证的就是它能胜任。你知道吗
以下是对代码的重构,包括以下更改:
input
。当然,你的朋友希望你制作一个可以正确重用的程序;需要用户交互会破坏这一点。你知道吗sys.argv[0]
。如果没有使用它,就不需要捕获它(如果以后需要它,它仍然存在)。你知道吗if __name__
。。。这样这段代码就可以import
插入到另一个程序中而不会产生副作用。你知道吗是的,
n = int(sys.argv[2])
就是魅力所在。你知道吗既然您是破解
sys.argv
的专家,您可能希望$ pip install click
让该包为您执行一些解析:https://click.palletsprojects.com/en/7.x/有条件地执行
def
是一个选项,我想,但有点奇怪。 将相同的定义粘贴到两个if
分支中是没有帮助的。 只要def
一次,就可以了。你知道吗相关问题 更多 >
编程相关推荐