编程练习(循环)

Demo31

n = eval(input())
for i in range(1, n + 1):
    for j in range(abs(n // 2 + 1 - i)):
        print(" ", end = "")
    for k in range(1, n + 1):
        if k <= i and k + i <= n + 1:
            if k == 1 or k + i == n + 1 or k == i:
                print("*", end = " ")
            else:
                print(" ", end = " ")
    print()

Demo32

n = eval(input())
for i in range(0, n):
    for j in range(abs(n // 2 - i)):
        print(" ", end = "")
    for k in range(1, n + 1):
        if k <= 2 * i + 1 and k <= 2 * (n - i) - 1:
            print("*", end = "")
    print()

Demo33

"""
数据:randNum userNum
1.输入
2.比较大小直到猜中
3.输出结果
"""
import random
randNum = random.randint(0,100)
while True:
    userNum = eval(input())
    if randNum == userNum:
        break
    elif randNum < userNum:
        print("高了")
    else:
        print("低了")
print("猜中了!答案就是%d" %randNum)

Demo34

最大公约数

a, b = map(int,input().split())
num = min(a, b)
for n in range(num, 0, -1):
    if a % n == 0 and b % n == 0:
        print(n)
        break

Demo35

"""
输入一个大于1的正整数
判断是否是素数
输出
"""
num = eval(input())
#设置标志(哨兵)
flag = True
for n in range(2, num // 2 + 1):
    if num % n == 0:
        flag = False
        break
if flag:
    print("Yes")
else:
    print("No")

Demo36

最小公倍数 = 两数相乘*最大公约数

a, b = map(int,input().split(" "))
num = min(a, b)
for i in range(num, 0, -1):
    if a % i == 0 and b % i == 0:
        break
print(i)
print(a * b // i)

Demo37

num = eval(input())
while num > 0:
    for i in range(2, num + 1):
        if num % i == 0:
            print(i, end =" ")
            break
    num //= i

Demo38

num = eval(input())
tatal = 0
for i in range(1, num // 2 + 1):
    if num % i == 0:
        tatal += i
if tatal == num:
    print("Yes")
else:
    print("No")

Demo39

"""
数据:count num
1.素数从2开始算
2.不知道计算次数用while循环
3.输出十个素数换行
"""
num = 2
count = 0
while count != 50:
    flag = True
    for i in range(2, num // 2 + 1):
        if num % i == 0:
            flag = False
            break
    if flag:
        print(num, end = "\t")
        count += 1
        if count % 10 == 0:
            print()
    num += 1

Demo40

"""
计算π的近似值
"""
i = eval(input())
PI = 0
for j in range(1, i + 1):
    PI += (-1) ** (j + 1) / (2 * j - 1)
PI *= 4
print(PI)

Demo41

#近似计算e
i = eval(input())
tatal = 1
n = 1
for j in range(1, i + 1):
    for k in range(2, j + 1):
        n = 1 / k * n 
    tatal += n
    n = 1
print(tatal)

Demo42

import random
count1 = 0 #用户赢的次数
count2 = 0 #电脑赢的次数
while count1 < 3 and count2 < 3:
    randNum = random.randint(0,2)
    print(randNum)
    userNum = int(input())
    if randNum == 0 and userNum == 1:
        count1 += 1
        print("用户赢")
    elif randNum == 0 and userNum == 2:
        count2 += 1
        print("电脑赢")
    elif randNum == 0 and userNum == 0:
        print("平局")

    if randNum == 1 and userNum == 1:
        print("平局")
    elif randNum == 1 and userNum == 2:
        count1 += 1
        print("用户赢")
    elif randNum == 1 and userNum == 0:
        count2 += 1
        print("电脑赢")

    if randNum == 2 and userNum == 1:
        count2 += 1
        print("电脑赢")
    elif randNum == 2 and userNum == 2:
        print("平局")       
    elif randNum == 2 and userNum == 0:
        count1 += 1
        print("用户赢")
if count1 == 3:
    print("用户赢")
else:
    print("电脑赢")

Demo43

count = 0
for i in range(1, 7):
    for j in range(2, 8):
        if i < j:
            print("(%d, %d)" %(i, j))
            count += 1
print("所有组合有%d" %count)

Demo44

count = 0
for i in range(1, 5):
    for j in range(1, 5):
        for k in range(1, 5):
            if i != j and j != k and i != k:
                print("%d%d%d" %(i, j, k))
                count += 1
print(count)

Demo45

for num in range(100, 1000):
    #取个位数
    a = num % 10
    #取十位数
    b = num // 10 % 10
    #取百位数
    c = num // 100
    if a ** 3 + b ** 3 + c ** 3 == num:
        print(num)

Demo46

n = eval(input())
#阶层为1和2的时候阶层是几层就有几种跳法
if n <= 2:
    print(n)
else:
    a = 1
    b = 2
    c = 0
    for i in range(3, n + 1):
        #斐波那契数列
        c = a + b
        a = b
        b = c
print(c)

Demo47

a, n = map(int,input().split())
total = 0
num = 0
for i in range(n):
    num = num * 10 + a
    total += num
print(total)

Demo48

n = eval(input())
s = ""
while n != 0:
    m = n % 2 
    s = str(m) + s
    n //= 2
print(int(s))

Demo49

s = input()
length = len(s) - 1
sum = 0
for i in s:
    j = int(i)
    sum += j * 2 ** length
    length -= 1
print(sum)

Demo50

"""
数据:num
1.输入
2.不知道次数用while
3.chr(ord('A') + y - 10) 转字母
4.str(y) + s 从后往前输出
"""
num = eval(input())
s = ""
while num !=0:
    y = num % 16
    if y >= 10:
        y = chr(ord('A') + y - 10)
    s = str(y) + s
    num //= 16
print(s)

Demo51

"""
1.输入一个字符串
2.将A-F转为数字 例如:ord('A') - 65 + 10
3.输出十进制
"""
s = input()
length = len(s)
sum = 0
for i in s:
    if i >= 'A':
        n = ord(i) - 65 + 10
    else:
        n = int(i)
    sum += n * 16 ** (length - 1)
    length -= 1
print(sum)

Demo52

s1 = input()
s2 = input()
s = ""
#取两个字符串中长度最小的字符串长度
min_len = min(len(s1), len(s2))
for i in range(min_len):
    if s1[i] == s2[i]:
        s += s1[i]
    else:
        break
print(s)

Demo53

s1 = input()
s2 = input()
count = 0
length = len(s1)
start = 0
while start < length:
    if s1[start] == s2[0]:
        #从当前下标往后取2个包括当前下标数
        if s1[start:start + 3] == s2:
             count += 1
             start += 2
    start += 1
print(count)

Demo54

s1 = input()
s2 = input()
m, n = len(s1), len(s2)  
# 创建一个二维数组来存储子问题的解
dp = [[0] * (n + 1) for _ in range(m + 1)]

 # 用于跟踪最长公共子串的长度以及其结束位置
max_length = 0
end_index = 0

# 填充 dp 数组
for i in range(1, m + 1):
    for j in range(1, n + 1):
        if s1[i - 1] == s2[j - 1]:
            dp[i][j] = dp[i - 1][j - 1] + 1
            if dp[i][j] > max_length:
                max_length = dp[i][j]
                end_index = i - 1  # 记录最长子串的结束位置
        else:
            dp[i][j] = 0

# 根据结束位置和最长子串的长度来提取最长公共子串
longest_substring = s1[end_index - max_length + 1: end_index + 1]
print(longest_substring)

Demo55

password = input()
length = len(password)
num_count = 0
uppercase_count = 0
for i in password:
    if i >= '0' and i <= '9':
        num_count += 1
    elif i >= 'A' and i <= 'Z':
        uppercase_count += 1
if length < 8:
    print("No")
elif num_count < 2:
    print("No")
elif uppercase_count < 2:
    print("No")
#判断是否有字母或者数字
elif not all(c.isalpha() or c.isdigit() for c in password):
    print("No")
else:
    print("Yes")

Demo56

num = 2
count = 0
while count < 100:
    # 将数字转换为字符串以检查是否为回文数  
    s = str(num)
    if s == s[::-1]:
        flag = True
        for i in range(2, int(num ** 0.5) + 1):
            if num % i == 0:
                flag = False
                break
        # 如果既是回文数又是素数,则输出并增加计数器 
        if flag:
            count += 1
            print(num, end = " ")   
            # 每10个数字后换行 
            if count % 10 == 0:
                print()
    num += 1

Demo57

num1 = 2
count = 0 
while count < 100:
    flag1 = True
    for n in range(2, int(num1 ** 0.5) + 1):
        if num1 % n == 0:
            flag1 = False
            break
    #将数字转化为翻转数
    s = str(num1)
    num2 = int(s[::-1])
    flag2 = True
    for n in range(2, int(num2 ** 0.5) + 1):
        if num2 % n == 0:
            flag2 = False
            break
    flag3 = True
    #判断两个数是否是回文
    if num1 == num2:
        flag3 = False
    if flag1 and flag2 and flag3:
        print(num1, end =" ")
        count += 1
        #每输出十个数换行
        if count % 10 == 0:
            print()
    num1 += 1

Demo58

num1 = 3
while num1 < 1000:
    for i in range(2, int(num1 ** 0.5) + 1):
        if num1 % i == 0:
            break
    else:
        num2 = num1 + 2
        for j in range(2, int(num2 ** 0.5) + 1):
            if num2 % j == 0:
                break
        else:
            print("(%d, %d)" %(num1, num2))
    num1 += 1        

Demo59

p = 2
while p <= 31:
    num = 2 ** p - 1
    for i in range(2, int(num ** 0.5) + 1):
        if num % i == 0:
            break
    else:
        print(num)
    p += 1

Demo60

n = eval(input())
nextGuess = 0
lastGuess = 1
sqrt_n = 0
while True:
    nextGuess = (lastGuess + n / lastGuess) / 2
    if abs(nextGuess - lastGuess) < 0.0001:
        sqrt_n = nextGuess
        break
    else:
        lastGuess = nextGuess
print(sqrt_n)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值