看到刚开始学python的作业觉得挺有意思,修改了之后拿出来分享一波。
打印空心三角
while True:
try:
height = int(input("请输入三角形的高度: "))
if height <= 0:
raise ValueError("无效的三角形高度!")
break
except ValueError as e:
print(e)
while True:
char = input("请输入三角形的填充字符: ")
if char != "" and char != " ":
break
print("无效的字符输入!")
def triangle(h, c):
print(" "*(h-1) + c)
for i in range(1, h-1):
print(" "*(h-i-1) + c + " "*(2*i-1) + c)
if h > 1:
print(" ".join([c]*h))
triangle(height, char)
这段代码使用一个
while
循环来要求用户输入三角形的高度,直到用户输入一个有效的高度为止。在每次迭代中,程序使用try
和except
语句块来捕获可能引发的ValueError
异常,并将该异常的错误消息打印到屏幕上。如果用户提供了一个有效的高度,则程序会跳出循环并继续进行。然后程序使用另一个while
循环要求用户输入要在三角形中使用的字符,直到用户提供有效的字符为止。在每次迭代中,程序检查用户输入的字符是否为空格或空字符串。如果是,则打印一条错误消息,并继续循环。如果用户提供了有效的字符,则程序会跳出循环并继续进行。最后,程序定义一个名为
triangle
的函数,该函数使用用户提供的高度和字符打印一个三角形。如果用户提供的高度为1,则该函数仅打印一个字符,否则它将打印三角形的顶部、中间和底部部分。程序使用提供的高度和字符调用该函数。
打印希尔顿序列(Hailstone Sequnce )
希尔顿序列即考拉兹猜想,又称奇偶归一猜想,冰雹猜想,其作为一个著名的数学问题,正确性至今都没有被得到证明。即:对任一正整数 n,若为偶数则除以 2,若为奇数则乘 3 再加 1,最后 n 总会变为 1。
input_num = int(input("N: "))
compare_num = 0
num = 0
def count(n):
loop_times = 0
row_result = ""
while n != 1:
loop_times += 1
if n % 2 == 0:
k = n // 2
if len(row_result):
temp_text = ', ' + str(int(n))
row_result += temp_text
else:
row_result += str(int(n))
n = k
else:
l = n * 3 + 1
if len(row_result):
temp_text = ', ' + str(int(n))
row_result += temp_text
else:
row_result += str(int(n))
n = l
if len(row_result):
temp_text = ', ' + str(int(n))
row_result += temp_text
else:
row_result += str(int(n))
print(row_result)
return loop_times
if input_num < 1:
print("N must be positive!")
else:
print(f'Hailstone sequences for 1 to {input_num}: ')
for in_loop_num in range(1, input_num + 1):
loop_result = count(in_loop_num)
if loop_result > compare_num:
compare_num = loop_result
num = in_loop_num
print(f"First longest sequence found in n = {num}")
当用户输入一个正整数N后,代码首先会定义变量
compare_num
和num
,它们用于记录最长序列的循环次数和对应的起始数值。然后定义了一个名为
count
的函数,用于计算给定数的Hailstone序列的循环次数。函数内部使用while
循环,根据Hailstone规则生成序列,并使用loop_times
变量记录循环次数。同时,将序列中的每个数拼接到row_result
字符串中。在主程序中,首先判断输入的N是否小于1,如果是,则打印提示信息并结束程序。否则,打印要计算的范围,并通过
for
循环从1到N遍历每个数值。对于每个数值,调用count
函数计算其Hailstone序列的循环次数,并将其存储到loop_result
变量中。如果loop_result
大于compare_num
,则更新compare_num
和num
的值。最后打印出循环次数最多的序列所对应的起始数值。