怎么用代码做出一棵圣诞树呢?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
C++代码:
#include <bits/stdc++.h>
using namespace std;
 
void Christmas_Tree(int height)
{
    int stars = 1;
    for (int i = 0; i < height; i++)
    {
        for (int j = 0; j < height-i; j++)
        {
            cout << " ";
        }
        for(int j = 0; j < stars; j++)
        {
            cout << "*";
        }
        cout << endl;
        stars += 2;
    }
    for (int i = 0; i < height/4; i++)   //让高一点的圣诞树看起来正常一些
    {
        for (int j = 0; j < height; j++)   //在正中间画树干
        {
            cout << " ";
        }
        cout << "|" << endl;
    }
    
}
 
int main()
{
    int n;   //树叶的高度
    cout << "请输入这棵圣诞树的高度:";
    cin >> n;    
    Christmas_Tree(n);
    return 0;
}
 
圣诞树效果图:

Life is short, use python! 调用turtle库
import turtle as t
screen = t.Screen()
screen.setup(800,700)
circle = t.Turtle()
circle.shape('circle')
circle.color('red')
circle.speed('fastest')
circle.up()
square = t.Turtle()
square.shape('square')
square.color('green')
square.speed('fastest')
square.up()
circle.goto(0,280)
circle.stamp()
k = 0
for i in range(1, 17):
    y = 30*i
    for j in range(i-k):
        x = 30*j
        square.goto(x,-y+280)
        square.stamp()
        square.goto(-x,-y+280)
        square.stamp()
    if i % 4 == 0:
        x = 30*(j+1)
        circle.color('red')
        circle.goto(-x,-y+280)
        circle.stamp()
        circle.goto(x,-y+280)
        circle.stamp()
        k += 2
    if i % 4 == 3:
        x = 30*(j+1)
        circle.color('yellow')
        circle.goto(-x,-y+280)
        circle.stamp()
        circle.goto(x,-y+280)
        circle.stamp()
square.color('brown')
for i in range(17,20):
    y = 30*i
    for j in range(3):
        x = 30*j
        square.goto(x,-y+280)
        square.stamp()
        square.goto(-x,-y+280)
        square.stamp()
t.exitonclick()
 
圣诞树效果图:

高阶版本
from turtle import *
import random
import time
n = 80.0
speed("fastest")
screensize(bg='seashell')
left(90)
forward(3*n)
color("orange", "yellow")
begin_fill()
left(126)
for i in range(5):
    forward(n/5)
    right(144)
    forward(n/5)
    left(72)
end_fill()
right(126)
color("dark green")
backward(n*4.8)
def tree(d, s):
    if d <= 0: return
    forward(s)
    tree(d-1, s*.8)
    right(120)
    tree(d-3, s*.5)
    right(120)
    tree(d-3, s*.5)
    right(120)
    backward(s)
tree(15, n)
backward(n/2)
for i in range(200):
    a = 200 - 400 * random.random()
    b = 10 - 20 * random.random()
    up()
    forward(b)
    left(90)
    forward(a)
    down()
    if random.randint(0, 1) == 0:
            color('tomato')
    else:
        color('wheat')
    circle(2)
    up()
    backward(a)
    right(90)
    backward(b)
time.sleep(60)
 
 
入门版本
height = 5
stars = 1
for i in range(height):
    print((' ' * (height - i)) + ('*' * stars))
    stars += 2
print((' ' * height) + '|')
 
